關于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