Promise.then方法的返回值問題

關于Promise的對象的基本用法不多說,只記錄自己容易混淆的一點,即then方法中函數(shù)的返回值問題。

var p1 = Promise.resolve(42)
p1.then((value)=>{
    //第一種情況,返回一個Promise
    return new Promise(function(resolve,rejected){
        resolve(value+1)
    })

    //第二種情況,返回一個值
     return value+2;

    //第三種情況,新建一個promise,使用reslove返回值
    const p2 = new Promise(function(resolve,rejected){
        resolve(value+3)
    })

//第四種情況,新建一個promise,使用return返回值
    const p2 = new Promise(function(resolve,rejected){
        return(value+4)
    })

//第五種情況,沒有返回值
  return undefined
}).then((value)=>{
   console.log(value)
})

按照學習理解:

第一種情況,新建promise的resolve傳出的值將作為then方法返回的promise的resolve的值傳遞出,console將打印出43

第二種情況,return的值將作為then方法返回的promise的resolve的值傳遞出,console將打印出44

第三種情況,雖然新建了promise,但對于then方法來說,沒有向它返回的promise傳遞返回值,console將打印出undifined

第四種情況,同第三種情況,

第五種情況,then方法沒有返回值,then方法的promise的resolve的值將傳遞出undifined。

以上三、四、五種情況,其實都是一樣的問題,構造then方法的函數(shù)沒有向then方法返回的promise對象的resolve方法傳遞值。因此resolve返回的都是undfined

測試結果:

image
image
image
image
image

進階,返回的promise自帶then方法:

var p1 = Promise.resolve(42) 

p1.then((value)=>{ 

//第一種情況,返回一個Promise 

return new Promise(function(resolve,rejected){ 

setTimeout(function(){

resolve(value+1)

},3000) 

}).then((value)=>{

return value+1

}) 

}).then((value)=>{ console.log(value)

 })

測試結果:

三秒后打出結果

image
?著作權歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

友情鏈接更多精彩內(nèi)容