关于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
测试结果:
进阶,返回的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)
})
测试结果:
三秒后打出结果