14. Promise的静态方法
于2023-08-15 13:35:33发布
23
Promise.resolve
返回一个成功/失败的promise对象
例子
const p1 = Promise.resolve('abc');
const p2 = Promise.resolve(false);
const p3 = Promise.resolve(new Promise((resolve, reject) => {
reject(123)
}));
console.log(p1)
console.log(p2)
console.log(p3)
Promise.reject
返回一个失败的promise对象
例子
const p = Promise.reject(true);
console.log(p)
可以看到有一个报错信息,这是因为promise返回了reject状态,但是没找到处理这个reject状态的函数,所以报错了。这里只需要catch一下即可
const p = Promise.reject(true);
p.catch(() => {})
console.log(p)
Promise.all
返回一个新的promise,只有所有的promise都成功才成功,只要有一个失败了就直接失败
使用场景举例 : 一个页面聊天系统,我们需要从两个不同的URL分别获得用户的个人信息和好友列表,这两个任务是可以并行执行的,这种情况下就可以使用
const p1 = new Promise((resolve, reject) => {
setTimeout(() => {
resolve('p1')
}, 3000);
});
const p2 = new Promise((resolve, reject) => {
setTimeout(() => {
resolve('p2')
}, 2000);
});
Promise.all([p1, p2]).then((r) => {
console.log(r)
});
Promise.race
返回一个新的promise,第一个完成的promise的结果状态就是最终的结果状态
使用场景举例 :有些时候多个异步任务是为了容错。比如同时向两个URL读取用户的个人信息,只需要获得先返回的结果即可。这种情况下就可以使用
const p1 = new Promise((resolve, reject) => {
setTimeout(() => {
resolve('p1')
}, 3000);
});
const p2 = new Promise((resolve, reject) => {
setTimeout(() => {
resolve('p2') // 这里不一定要求返回resolve,也可以返回reject
}, 2000);
});
Promise.race([p1, p2]).then((r) => {
console.log(r)
});