多個Promise執行順序


app.isLogin()
    // 判斷是否登錄后
    .then(res=>{
        this.setData({
          login: true
        }, res2=>{
          // 清空臨時積分
          return app.clearTempScore()   // 返回Promise
        })
    })
    .then(res => {
      console.log('.then..............')
    })
    .catch(err=>{
      console.log(err)
    })

1、setData中返回Promise

   會直接執行第二個.then(),即使app.clearTempScore返回的狀態是pending(正常返回的Promise,狀態是pending,不會執行.then())

   因為setData是異步請求,會拿到 臨時儲物台 執行,此時,流水線上並沒有 返回 Promise

   所以,會順序執行流水線上的第二個.then()

app.isLogin()
    // 判斷是否登錄后
    .then(res=>{
        
    })
    .then(res => {
      console.log('.then..............')
    })
    .catch(err=>{
      console.log(err)
    })

2、第一個.then()中沒有直接的 return 一個Promise,代碼會順序執行第二個.then()

3、第一個.then()中如果有直接的 return 一個Promise(流水線上return了一個Promise),代碼才會 等待 return 的這個Promise,有了 resolve 或 reject 狀態后, 再執行第二個.then()

 

4、如果Promise內部出錯,並且內部reject了錯誤(如果沒有reject錯誤,會直接報錯),則這個Promise會尋找距離他最近的.catch()方法執行

   如果Promise內部沒有出錯,則這個Promise會尋找距離他最近的.then()方法執行

   如果app.isLogin()內部出錯,並且內部reject了錯誤(如果沒有reject錯誤,會直接報錯),會執行距離他最近的(也就是最下邊那個).catch()方法

   如果app.isLogin()內部沒有出錯,會執行距離他最近的(緊挨着他的那個).then()方法

onLookPhone(){
    app.isLogin()
    .then(res=>{
      return app.clearTempScore()
    })
    .then(res=>{
      return app.getUserScore()
    })
    .then(res=>{
      console.log('.then3')
    })
    .catch(err=>{
      console.log(err)
    })
  },


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM