10

Google Drive APIのクイックスタート ガイドでは、クライアント ライブラリが読み込まれると次の関数が呼び出されます。

// Called when the client library is loaded to start the auth flow.
function handleClientLoad() {
    window.setTimeout(checkAuth, 1);
}

setTimeoutすぐに呼び出すのではなく、このように1の遅延で呼び出す目的は何checkAuthですか?

4

3 に答える 3

10

Javascript には非同期 I/O (ajax/request)setTimeoutsetInterval

setTimeout1 ミリ秒 (または 0)で実行する 1 つの用途は、そのコードがそれに続く同期コードの後に​​実行されるように指示することです。ここに例があります

setTimeout(function(){
     alert("World");
},1); 
alert("Hello");

//alerts "Hello" then "World"

私は自分の答えをシンプルに保ちたいと思っていました。興味がある場合は、 setTimeout がどのように機能するかについての詳細がMDN の記事にあります。

于 2013-02-06T23:20:19.800 に答える
7

を使用すると、関数が完了setTimeoutする前にページをインタラクティブにすることができます。checkAuth

基本的にcheckAuth、ページを保持するのを防ぎます。

補足として、HTML5 仕様で指定されている最小遅延は 5 ミリ秒であるため、1 ミリ秒の待機は実際には 5 ミリ秒の待機になります。その時間を再利用することが重要な場合は、 を使用して 0 ミリ秒の遅延で同じ結果を得ることができますwindow.postMessage。これは元々、クロスオリジン通信を処理するために設計されましたが、タイムアウトを 0 ミリ秒に設定するのと同様の効果があります (ブラウザは 5 ミリ秒しか許可していないため、一部の古いブラウザでは 10 ミリ秒しか許可されていません)。

最後に、タイミングは保証されません。JavaScript は単一のスレッドで実行されるため、タイマーに何かをプッシュすると、残りの JavaScript の実行が開始されるのを待ってから、スレッドで順番に実行されるため、並行して実行されません。

于 2013-02-06T23:20:59.127 に答える
2

setTimeout(function, 1)function現在の実行スレッドが完了した後に実行されます。ブラウザー ウィンドウの JavaScript は、単一のスレッドで実行されます。そのため、タイムアウトが 1 であっても、現在の実行が終了するまで実行されません。たとえば、次のスクリプトを検討してください。

window.setTimeout(checkAuth, 1);

// long code that takes 5 seconds to complete


function checkAuth() {
    alert("i m here!");
}

上記の例では、5 秒後にアラートが表示されます。

于 2013-02-06T23:22:27.010 に答える