setTimeout による予期しない即時関数実行
特定の間隔で関数呼び出しをスケジュールしようとすると、setTimeout が無効になるという問題が発生します。 function は、指定されたタイムアウトにもかかわらず、関数をただちに実行します。 doRequest 関数は 10 秒間隔で呼び出されるはずですが、すぐに呼び出されます。
この即時実行の原因は、setTimeout 関数の呼び出し方法にあります。次のコード スニペットは問題を示しています。
setTimeout(doRequest(url, proxys[proxy]), proxytimeout);
このコードでは、doRequest 関数が最初の引数として setTimeout に渡されますが、関数はスケジュールされているのではなく、すぐに実行されています。
解決策:
この問題を解決し、doRequest を確実にスケジュールするには、次の 3 つの代替方法があります。 setTimeout:
関数名を文字列として渡す:
setTimeout('doRequest(' + url + ',' + proxys[proxy] + ')', proxytimeout);
匿名を使用関数:
(function(u, p, t) { setTimeout(function() { doRequest(u, p); }, t); })(url, proxys[proxy], proxytimeout);
最初に関数名を渡し、次にパラメータ:
setTimeout(doRequest, proxytimeout, url, proxys[proxy]);
以上がsetTimeout 関数がすぐに実行されるのはなぜですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。