Promise.then方法的返回值问题

关于Promise的对象的基本用法不多说,只记录自己容易混淆的一点,即then方法中函数的返回值问题。

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方法的函数没有向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

你可能感兴趣的:(Promise.then方法的返回值问题)