setTimeout(function() {
console.log("1");
}
console.log("2");
基本的には「2」より先に「1」を出力したいもの。コールバック関数を現在の「呼び出し元」スレッドと同期するにはどうすればよいですか?
setTimeout(function() {
console.log("1");
}
console.log("2");
基本的には「2」より先に「1」を出力したいもの。コールバック関数を現在の「呼び出し元」スレッドと同期するにはどうすればよいですか?
次のようなものを試してください:
setTimeout(function() {
console.log("1");
callback();
}
function callback(){
console.log("2");
}
JavaScript でスレッドを保持することはできません (alert
とconfirm
ビルトインをconsole.log("2")
除く) console.log("1")
。
タイムアウト関数に入れます:
setTimeout(function() {
console.log("1");
console.log("2");
}, delay);
...または、そのタイムアウト関数が呼び出す別の関数では、 の関数が既にあるため、別の関数がsetTimeout
必要な理由は (コード構成を除いて) 不明です。
setTimeout
より長い遅延で渡す別の関数に入れます。
setTimeout(function() {
console.log("1");
}, delay);
setTimeout(function() {
console.log("2");
}, longerDelay);
longerDelay
...実際にはそれよりも十分に長いのでdelay
、スケジューリングに関して少し混乱しないように注意してください。
上で「スレッド」と言ったことに注意してください。特定の構文を持つWeb ワーカーを使用していない限り、ブラウザー上の JavaScript はシングルスレッドです。2 つの JavaScript 関数を同時に実行することはできません。エッジ ケースのブラウザー バグalert
や ajax 補完などは別として (少なくとも一部のバージョンの Firefox では、関数が待機している間に ajax 補完コールバックを実行しますalert
。奇妙ですが真実であり、信頼できるものは何もありません。クロスブラウザまたはクロスバージョンでさえ)、別の JavaScript 関数が実行されている間、そのトラックで 1 つの JavaScript 関数を一時停止することはできません。