const p1 = new Promise((resolve) => {setTimeout(() => {resolve(1);}, 1000);});const p2 = new Promise((resolve,reject) => {setTimeout(() => {// resolve(2);reject(2);}, 2000);});const p3 = new Promise((resolve) => {setTimeout(() => {resolve(3);}, 3000);});const promiseArr = [p1, p2, p3];
多个请求继发执行
(async function test() {for (const p of promiseArr) {const res = await p;console.log(res);}})();// 顺序打印出123// 如果有个promise错误 ,会中断// 需要catch(async function test() {const res = [];for (const p of promiseArr) {const a = await p.catch((err) => err);console.log(a)res.push(a); //可以用数组存起来结果}console.log(res); // [1,2,3]})();
多个请求并发执行
Promise.all(promiseArr).then((res) => {console.log("res", res); // 3s后一下打印出 [1, 2, 3]}).catch((err) => {console.log("err", err);});// 如果有个promise错误也会中断// 返回一个处理之后的promise数组,让所有的promises都走resolveconst transPromises = (promises) => {return promises.map((promise) => {return promise.then((res) => res).catch((err) => err);});};const newArr = transPromises(promiseArr);Promise.all(newArr).then((res) => {console.log("res", res);}).catch((err) => {console.log("err", err);});// res [ 1, 'e2', 3 ]
Promise.allSettled
Promise.allSettled(promiseArr).then((res) => {console.log("res", res);}).catch((err) => {console.log("err", err);});// 打印:res [{ status: 'fulfilled', value: 1 },{ status: 'rejected', reason: 'e2' },{ status: 'fulfilled', value: 3 }]
