then 方法 then是對象上面的一個方法。它其實是放在 Promise.prototype.then
1:同一個Promise可以調用多次then方法
2:then方法傳入的回調函數可以有返回值,返回值是一個新的Promise,具體返回的類型類似於resolve參數
返回值是一個新的Promise時間上是這樣一個過程:new Promise(resolve=>{resolve(x)} 會自動執行resolve這塊
具體實現看代碼
1 //Promise有哪些對象方法 2 // console.log(Object.getOwnPropertyDescriptors(Promise.prototype)); 3 const promise = new Promise((resolve, reject) => { 4 resolve('hahahahha') 5 }) 6 //1:同一個Promise 可以多次調用then方法 7 //當resolve方法被回調時,所有的then方法傳入的回調函數都會被調用 8 promise.then((res) => { 9 console.log('res1:', res); 10 }) 11 promise.then((res) => { 12 console.log('res2:', res); 13 }) 14 //2:then方法傳入的回調函數可以有返回值,返回值是Promise 15 //1>返回的是一個普通的值(數值、字符串、普通對象、undefined),這個值作為新的Promise的resolve值 16 promise.then(res => { 17 18 console.log('原來Promise的res', res); 19 return 'aaaaa' 20 }).then(res => { 21 console.log('新的Promise的then里面的res', res); 22 return 'bbbbbb' 23 }).then(res => { 24 console.log('鏈式調用', res); 25 }).then(res => { 26 console.log('沒有返回值拿到的res:', res); 27 }) 28 //2>返回的是Promise 狀態由這個新的Promise 決定 29 promise.then(res => { 30 31 console.log('原來Promise的res', res); 32 return new Promise((resolve, reject) => { 33 setTimeout(() => { 34 resolve(1111) 35 }, 3000) 36 }) 37 }).then(res => { 38 console.log('新的Promise的then里面的res', res); 39 }) 40 //3>返回的是一個對象 並且改對象有then方法 那么會執行改then方法,並根據then方法的結果來決定Promise的狀態 41 promise.then(res => { 42 43 console.log('原來Promise的res', res); 44 const obj = { 45 then: function(resolve, reject) { 46 resolve('我是對象里面的then') 47 } 48 } 49 return obj 50 }).then(res => { 51 console.log('新的Promise的then里面的res', res); 52 })