function retPromise(str) {
return new Promise(resolve=>{
resolve(str);
})
}
console.log(retPromise("first")) // 返回一个Promise对象
retPromise("x").then(str=>{
return retPromise("first")
}).then(str=>{
console.log(str) // 返回"first"
})
為什麼在then中return Promise對象,在下一個then中被resolve了?
第二個then的執行鍊是不是第二個Promise的?
Promise的想法就是把所有同步和非同步的程式碼都視為非同步程式碼,then方法內部會回傳一個新的
Promise
(链式调用),then方法的第一个参数onfulfilled
是在前一个Promise
物件的非同步呼叫完成之後所呼叫的這裡還是牽扯到
Promise
構造函數內部的一些實現,剛好前幾天實現了一個簡單的Promise,這裡是傳送門,希望對您有所幫助我不是大牛-_-我描述下我的觀點。
then鍊式呼叫會取上一個then的return值做參數,Promise的then函數內部實作為對return的值進行Promise對象化處理,例如基本資料型別會直接透過Promise.resolve(data)傳回Promise對象,如果是Promise物件則執行其resolve函數來觸發下一個then函數。
你可以把這個then執行鏈分解成:
你也可以利用setTimeout把function retPromise(str)設定成延遲返回。這樣效果更好一點