new Promise 出來的promise例項物件的預設狀態是pendding,不能像then/catch方法一樣返回一個新的promise例項物件!!!
阿新 • • 發佈:2020-11-22
then/catch方法可以返回一個新的promise例項物件。then/catch方法指定的回撥函式(執行)return的返回值可以決定這個新的promise例項物件的狀態,這正是實現then方法鏈式呼叫的基礎。
promise例項物件預設狀態是pendding,可以改變自身狀態。但普通的promise例項物件不會返回一個新的promise例項物件,因此在promise例項物件的執行器函式return一個結果是沒有意義的。promise例項物件應該關注的是自身的狀態改變。
new Promise((resolve, reject) => { return Promise.resolve(1) //return一個成功狀態的promise例項物件:promise例項狀態依然是pendding。 }) .then(value => { console.log('成功', value); return 5 }, reason => { console.log('失敗', reason); }) .then(value => { console.log('成功hhh', value); }, reason => { console.log('失敗', reason); }) //無列印 //錯誤分析:認為promise例項物件也能返回一個新的promise例項物件,實際上這是then/catch方法的特點,和promise例項物件無關。promise例項物件的關注點應該是自身狀態的改變,利用promise例項物件(執行器函式中)去return一個值去鏈式呼叫是沒有意義的。promise例項物件可以改變自己的狀態並且傳遞狀態值。
new Promise((resolve, reject) => { return 5 //return5 }) .then(value => { console.log('成功', value); return 5 }, reason => { console.log('失敗', reason); }) .then(value => { console.log('成功hhh', value); }, reason => { console.log('失敗', reason); }) //無列印