将多个Promise实例包装成一个新的Promise实例的方法
Promise对象提供了很多方法来实现对多个Promise实例的统一处理,常用的方法我会在下面一一说明。
Promise.all()
Promise.all()
当所有的 Promise
都执行完成后返回所有数据组成的数组,如果任一 Promise
失败,则直接返回该 Promise
的错误信息。
// Promise 传参封装
function test(arg) {
const p = new Promise((resolve, reject) => {
if (arg) {
resolve(`result is ${
arg}`);
} else if (arg === 0) {
throw new Error("result is 0");
} else {
reject("result is null");
}
});
return p;
}
// 都成功
Promise.all([test(1), test(2), test(4)])
.then((data) => console.log(data))
.catch((err) => console.error(err));
// test() reject
Promise.all([test(1), test(), test(0)])
.then((data) => console.log(data))
.catch((err) => console.error(err));
// test(0) 抛出异常
Promise.all([test(1), test(0), test()])
.then((data) => console.log(data))
.catch((err) => console.error(err));
输出结果为:
[ 'result is 1', 'result is 2', 'result is 4' ]
result is null
Error: result is 0
上面测试的 Promise
实例如果自己回调了又会如何呢?
// Promise 传参封装
function test(arg) {
const p = new Promise((resolve, reject) => {
if (arg) {
resolve(`result is ${
arg}`);
} else if (arg === 0) {
throw new Error("result is 0");
} else {
reject("result is null");
}
})
.then((result) => {
console.log(`Promise success: ${
result}`);
return result;
})
.catch((err) => {
console.error(`Promise error: ${
err}`);
return err;
});
return p;
}
Promise.all([test(1), test(), test(0)])
.then((data) => console.log(`all success: ${
data}`))
.catch