ホームページ  >  記事  >  ウェブフロントエンド  >  PromiseとsetTimeoutの実行順序は何ですか? Promise関数の実行シーケンスの詳細説明

PromiseとsetTimeoutの実行順序は何ですか? Promise関数の実行シーケンスの詳細説明

云罗郡主
云罗郡主転載
2018-11-21 15:50:494862ブラウズ

この記事の内容はpromiseとsetTimeout?の実行順序についてです。 Promise 関数の実行シーケンスの詳細な説明は、必要な友人が参考になれば幸いです。

一度、面接の質問でpromiseとsetTimeoutの実行順序について質問したことがありますが、その時はまだ少し混乱していましたので、ここに記録しておきます。

1. 出力

setTimeout(function() {
console.log(111)
}, 0);
setTimeout(function() {
console.log(333)
}, 1000);
new Promise(function(resolve){
console.log(444);
resolve();
console.log(555);
})。then(function(){
console.log(666);
});
console.log(777);
async function test1() {
console.log("test1");
await test2();
console.log("test1 last");
}
async function test2() {
console.log("test2");
}
test1();

結果の出力

PromiseとsetTimeoutの実行順序は何ですか? Promise関数の実行シーケンスの詳細説明

2. まず同期コードを実行します。次に、イベントポーリング方式で非同期コードを実行します

Promise での非同期実装が可能になりました。 then() と 。 catch() の

と Promise の関数の同期コード

上記のコードは、最初に Promise の同期コードを実行し、次にスクリプト自体の同期コードを実行します

async メソッドが同期か非同期かに関係なく、async キーワードを使用してメソッドを識別できます。

async 識別子はメソッド内でのみそれを示すため、await キーワードを使用してメソッドを識別できます。また、非同期メソッドは await キーワードを使用した場合のみ非同期操作となり、残りは同期操作となります。 Promise オブジェクトを使用すると、then メソッドを使用してコールバック関数を追加できます。

関数が実行されると、await が発生すると、最初に戻り、トリガーされた非同期操作が完了するまで待機してから、後続の関数を実行します。関数本体

#await コマンド Promise オブジェクト内のステートメントでは、実行結果が拒否される可能性があるため、try...catch コード ブロック

##3 に await コマンドを入れるのが最善です。

私もインターネット上でいくつかの情報を見つけたので、この記事を参照しました。一部の内容については、記事を参照してください

setImmediate(function(){
console.log(1);
},0);
setTimeout(function(){
console.log(2);
},0);
new Promise(function(resolve){
console.log(3);
resolve();
console.log(4);
})。then(function(){
console.log(5);
});
console.log(6);
process.nextTick(function(){
console.log(7);
});
console.log(8);

出力結果: 3 4 6 8 7 5 2 1

マクロタスク: スクリプト (コード全体)、setTimeout、setInterval、setImmediate、I/O、UI レンダリング。

マイクロタスク: process.nextTick、Promise (ネイティブ)、Object.observe、MutationObserver

# ##最初の一歩。スクリプト全体のコードが実行され、実行プロセスは

#Create setImmediateマクロタスク

Create setTimeoutマクロタスク

マイクロタスクPromise.thenのコールバックを作成し、スクリプトを実行します。 console.log (3) ; replace(); console.log(4); このとき、resolve が呼び出されて実行されますが、コード全体は実行されていないため、Promise.then プロセスに入ることができません。 。
console.log(6) 出力 6

process.nextTick Create micro-task

console.log(8) 出力 8

最初のプロセスの後、3 4 6 が出力されました 8

2 番目のステップ。他のマイクロタスクはマクロタスクよりも優先度が高いためです。

このとき、マイクロタスクには優先度の高いプロセスに従ってタスクが2つあります。nextTickはPromiseよりも高いので、最初に7を出力し、次に5を出力します。

3番目のステップ、実行が完了したら、setTimeout の方が setIImmediate よりも優先度が高いため、最初に 2 が出力され、次に 1 が出力されます。

Priority:promise.Trick()>promise callback>setTimeout>setImmediate

上記はpromiseとsetTimeoutの実行順序は何でしょうか? Promise 関数の実行シーケンスの詳細な説明を完全に紹介します。

JavaScript チュートリアル

について詳しく知りたい場合は、PHP 中国語 Web サイトに注目してください。

以上がPromiseとsetTimeoutの実行順序は何ですか? Promise関数の実行シーケンスの詳細説明の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事はsegmentfault.comで複製されています。侵害がある場合は、admin@php.cn までご連絡ください。