亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

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

關于串行promise的一個問題

關于串行promise的一個問題

慕森卡 2019-03-11 20:04:32
現在用這樣一段代碼:(() => {  return new Promise((resolve) => {     setTimeout(() => {      console.log('task1 -> 3s')       resolve()     }, 3000);   })   .then(() => {       setTimeout(() => {        console.log('task2 -> 2s')         Promise.resolve()       }, 2000);   })   .then(() => {     setTimeout(() => {      console.log('task3 -> 1s')     }, 1000);   }) })() 輸出的順序是 task1 -> task3 -> task2如果改成:(() => {   return new Promise((resolve) => {     setTimeout(() => {       console.log('task1 -> 3s')       resolve()     }, 3000);   })   .then(() => {     return new Promise((resolve) => {       setTimeout(() => {         console.log('task2 -> 2s')         resolve()       }, 2000);     })   })   .then(() => {     setTimeout(() => {       console.log('task3 -> 1s')     }, 1000);   }) })()就可以了而如果將第二個then 改成再返回一個promise就會沒問題,請問這是為什么,我的想法是,第一種用Promise.then()不也是等待這個異步函數執行完再執行下面的內容嗎?請指教哪里理解的不對,謝謝了~
查看完整描述

2 回答

?
千巷貓影

TA貢獻1829條經驗 獲得超7個贊

為什么:
then 接收的函數是會被判斷的,
如果這個函數是 promise,那么下一個 then 會變成傳入的這個 promise 的 then,
如果這個函數不是 promise,那么下一個 then 還是最開始的那個 promise 的 then

查看完整回答
反對 回復 2019-03-11
  • 2 回答
  • 0 關注
  • 390 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

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

公眾號

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