JS Promise實例 then()方法
內容已更新,可百度搜索: EC前端
描述:
then()方法用於指定當前實例狀態發生改變時的回調函數。它返回一個新的Promise實例。
語法:
Promise.prototype.then(onFulfilled, onRejected);
參數:
參數 | 描述 |
---|---|
onFulfilled | 當前實例變成fulfilled狀態時,該參數作為回調函數被調用。 |
onRejected | 當前實例變成reject狀態時,該參數作為回調函數被調用。 |
返回值:
一個新的Promise實例。
注意:
onFulfilled將接收一個參數,參數值由當前Promise實例內部的resolve()方法傳值決定;onRejected將接收一個參數,參數值由當前Promise實例內部的reject()方法傳值決定。
例1:
const p = function(){ let num = Math.random(); return new Promise((resolve, reject) => { setTimeout(() => { num > 0.5 ? resolve(num) : reject(num); }, 1000); }) }; p().then(val => { console.info(`Status switches to fulfilled, and the value is ${val}`); }, val => { console.info(`Status switches to reject, and the value is ${val}`); })
上面的例子中。若隨機數大於0.5,Promise實例狀態將轉變成fulfilled,則then方法將調用第一個傳入的回調函數;Promise實例狀態將轉變成reject,則then方法將調用第二個傳入的回調函數;
例2:
const p = function(){ return new Promise((resolve, reject) => { setTimeout(() => { reject('Refused the request!'); },0); }) }; const p2 = function(){ return new Promise((resolve, reject) => { setTimeout(() => { resolve(p()) },0); }) }; p2().then(val => { console.info('Status switches to fulfilled'); console.info(val); }, val => { console.info('Status switches to reject'); console.info(val); }); // 輸出 "Status switches to reject" // 輸出 "Refused the request!"
上面的例子中:當Promise實例內部的fulfilled(或reject)傳入的是Promise實例時,其狀態以及then()方法的傳值將由傳入的Promise實例的狀態決定。