# 1. 基本用法
- promise 实例创建
const promise = new Promise(function(resolve, reject) {
// ... some code
if (/* 异步操作成功 */){
resolve(value);
} else {
reject(error);
}
});
- 实例生成后的调用
promise.then(
function(value) {
// success
},
function(error) {
// failure
}
);
- 调用时序
new Promise((resolve, reject) => {
resolve(1);
console.log(2);
}).then((r) => {
console.log(r);
});
上面代码中,调用 resolve(1)以后,后面的 console.log(2)还是会执行,并且会首先打印出来。这是因为立即 resolved 的 Promise 是在本轮事件循环的末尾执行,总是晚于本轮循环的同步任务。
# 2. promise 相关 api
- Promise.prototype.then() then 方法返回的是一个新的 Promise 实例(注意,不是原来那个 Promise 实例)。因此可以采用链式写法,即 then 方法后面再调用另一个 then 方法。
- Promise.prototype.catch() Promise 对象的错误具有“冒泡”性质,会一直向后传递,直到被捕获为止。也就是说,错误总是会被下一个 catch 语句捕获。
- Promise.prototype.finally() finally()方法用于指定不管 Promise 对象最后状态如何,都会执行的操作
- Promise.all() Promise.all()方法用于将多个 Promise 实例,包装成一个新的 Promise 实例。
- Promise.allSettled() 只有等到所有这些参数实例都返回结果,不管是 fulfilled 还是 rejected,包装实例才会结束
- Promise.resolve()
- Promise.reject() Promise.reject(reason)方法也会返回一个新的 Promise 实例,该实例的状态为 rejected