第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

哪個老哥解釋一下這個Promise為什么是這樣的輸出順序

哪個老哥解釋一下這個Promise為什么是這樣的輸出順序

開心每一天1111 2019-03-13 18:15:30
題目描述求解這段代碼的輸出順序:console.log('begin');setTimeout(() => {  console.log('setTimeout 1');  Promise.resolve()    .then(() => {      console.log('promise 1');      setTimeout(() => {        console.log('setTimeout2');      });    })    .then(() => {      console.log('promise 2');    });      new Promise(resolve => {    console.log('a');    resolve();  }).then(() => {    console.log('b');  });}, 0);console.log('end');實際輸出順序為:beginendsetTimeout 1apromise 1bpromise 2setTimeout2誰能解釋一下為什么是這個順序呢?萬分感謝
查看完整描述

4 回答

?
繁花如伊

TA貢獻2012條經驗 獲得超12個贊

同步狀態(tài)下順序執(zhí)行
Promise 新建后立即執(zhí)行, then 在當前腳本所有同步任務執(zhí)行完才會執(zhí)行, then方法返回的是一個新的Promise實例
Promise.resolve方法允許調用時不帶參數(shù),直接返回一個resolved狀態(tài)的 Promise 對象。
事件隊列里面 Promise 比 setTimeout 早執(zhí)行
所以應該是這樣:
=> 'begin'
=> 定義了一個異步setTimeout 1,先放到事件隊列(setTimeout 1),繼續(xù)同步執(zhí)行
=> 'end'
=> 同步代碼執(zhí)行完成,開始執(zhí)行異步 setTimeout 1 代碼
=> 'setTimeout 1'
=> 定義了異步Promise.resolve,返回一個 Promise1 ,先放到事件隊列(Promise1),繼續(xù)同步執(zhí)行
=> 新建Promise 立即執(zhí)行
=> 'a'
=> 同步代碼執(zhí)行完畢,返回新的Promise , 先放到事件隊列(Promise1,Promise)
=> 開始執(zhí)行 Promise1
=> 'promise 1'
=> 繼續(xù)同步執(zhí)行,定義了一個異步setTimeout 2, 放到事件隊列(Promise,setTimeout 2)
=> Promise1同步代碼執(zhí)行完畢,返回一個 Promise2, 放到事件隊列(Promise,setTimeout 2,Promise2)
=> 同步代碼執(zhí)行完畢,執(zhí)行 Promise代碼
=> 'b'
=> Promise 完畢,隊列中還有 Promise2 和 setTimeout 2
=> 先 Promise2
=> 'promise 2'
=> 繼續(xù) setTimeout 2
=> 'setTimeout2'



查看完整回答
反對 回復 2019-04-15
  • 4 回答
  • 0 關注
  • 588 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號