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)
});