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) }) },