promiseとsetTimeoutの実行順序問題
2709 ワード
ある時、面接問題の中でプロミゼとsetTimeoutの実行順がありました.その時はちょっとばかばかしくて、実行順序はちょっと間違っていました.ここにメモしてください.
1.出力出力結果 2.個人的な理解は、最初に同期コードを実行し、次いでイベントポーリング方式で非同期コード を実行する. promiseにおける非同期は.then()と.catch()において でpromiseのfunctionには同期コード があります.上のコードはプロミセの同期コードを先に実行し、スクリプト内の自身の同期コード を実行します. asyncは、方法が同期であろうと、非同期であろうと、asyncキーで識別することができる . asyncで識別すると、この方法ではawaitキーワードを用いて非同期化する可能性があることを示すだけでなく、この非同期方法を明確に区分し、awaitキーワードを使用した場合のみ非同期動作であり、残りは一括して同期動作 である.はGenerator関数と同じで、async関数はPromiseオブジェクトに戻り、then方法を使用してコールバック関数を追加することができます. 関数が実行されると、awaitが発生すると、先に戻り、トリガされた非同期動作が完了するまで、関数の内部にあるステートメント が実行される. awaitコマンドの後のPromiseオブジェクトは、実行結果がrejectである可能性がありますので、awaitコマンドをtry...catchコードブロックの中に入れた方がいいです.
3.その他 はネット上でまたいくつか資料を探し当てました.
この文章のいくつかの内容を参考にして文章を参考にした. 出力結果:3 4 6 8 5 2 第一歩.script全体コードが実行され、実行プロセスは である.最初のプロセスの後、すでに3 4 6 8 が出力されました.第二ステップ.他のmicro-taskの優先度がmacro-taskより高いためです. この時、micro-taskの中に優先順位プロcess.nextTickがPromiseより高い二つのタスクがあるので、先に7を出力して、5 を出力します.第3ステップ、micro-taskタスクリストはすでに実行済みで、家に来てmacro-taskを実行します.setTimeoutの優先度がsetImmediteより高いので、先に2を出力して、もう1を出力します. 優先度:promise.Trick()>promiseのフィードバック>setTimeout>setImmedite
一生懸命勉強しています.勉強に役立つなら、印をつけてください.以前の好文おすすめ: は、iOSとAndroidおよびPC端末 を判断する.純粋なcssは滝の流れを実現します. 複数行の文字と単一行の略号 を実現します.マイクロクレジットの買い物車と親子部品の値段及びcall cの注意事項
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();
3.その他
この文章のいくつかの内容を参考にして文章を参考にした.
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);
macro-task: script ( ),setTimeout, setInterval, setImmediate, I/O, UI rendering.
micro-task: process.nextTick, Promise( ),Object.observe,MutationObserver
setImmediate macro-task
setTimeout macro-task
micro-task Promise.then , script console.log(3); resolve(); console.log(4); 3 4, resolve , , Promise.then 。
console.log(6) 6
process.nextTick micro-task
console.log(8) 8
一生懸命勉強しています.勉強に役立つなら、印をつけてください.