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實例的狀態決定。