1. 程式人生 > >關於一道promise的面試題

關於一道promise的面試題

setTimeout(function(){
    console.log(1);
}, 0)

new Promise(function executor(resolve){
    console.log(2);
    for(var i = 0; i < 1000; i++){
        i = 9999 && resolve();
    }
    console.log(3);
}).then(function(){
    console.log(4);
})

console.log(5);

之前說過,在定時器,事件,ajax等操作的時候,會使一個非同步操作,會把該操作放到一個task queue裡,需要等當前主執行緒的任務完成後,會讀取任務佇列(task queue)中的是事件。

那麼,setTimeout會放到任務佇列中,程式碼繼續往下走。
所以先輸出2 3。
promise中的then操作是放在執行棧,也就是主執行緒的最後。
那麼主執行緒會繼續往下走咯。
所以輸出 5 4
最後主執行緒的任務搞完了,才會去執行task queue中的任務。
所以最後執行1

// 2, 3, 5, 4, 1