then()方法的作用是Promise實例添加解決(fulfillment)和拒絕(rejection)狀態的回調函數。then()方法會返回一個新的Promise實例,所以then()方法后面可以繼續跟另一個then()方法進行鏈式調用。
let p = new Promise((resolve, reject) => {
setTimeout(resolve, 1000, 'success');
});
p.then(
res => {
console.log(res);
return `${res} again`;
}
)
.then(
res => console.log(res)
);
// 連續
// success
// success again
但是前一個then()方法中的回調函數中又可能返回一個Promise實例,這時候后面一個then()方法中的回調函數會等前一個Promise實例的狀態發生變化才會調用。
let p = new Promise((resolve, reject) => {
setTimeout(resolve, 1000, 'success');
});
p.then(
res => {
console.log(res);
return new Promise((resolve, reject) => {
setTimeout(resolve, 1000, 'success');
});
}
)
.then(
res => console.log(res)
);
// 相隔1000ms
// success
// success