- 使用方式:
async/await
用于异步函数中处理 Promise
,Promise.all
用于并行处理多个 Promise
。
- 首先创建多个返回
Promise
的函数,然后将这些 Promise
放入 Promise.all
中,在 async
函数里使用 await
等待 Promise.all
执行完成。
- 示例代码:
async function fetchData() {
// 模拟三个异步请求
const promise1 = new Promise((resolve) => {
setTimeout(() => {
resolve('Result of promise1');
}, 1000);
});
const promise2 = new Promise((resolve) => {
setTimeout(() => {
resolve('Result of promise2');
}, 1500);
});
const promise3 = new Promise((resolve) => {
setTimeout(() => {
resolve('Result of promise3');
}, 2000);
});
try {
const results = await Promise.all([promise1, promise2, promise3]);
console.log(results); // 输出: ['Result of promise1', 'Result of promise2', 'Result of promise3']
} catch (error) {
console.error(error);
}
}
fetchData();
- 原理阐述:
Promise.all
接收一个 Promise
数组作为参数,它返回一个新的 Promise
。
- 当传入的所有
Promise
都变为 resolved
状态时,这个新 Promise
才会 resolved
,并且其 resolve
的值是一个包含所有传入 Promise
的 resolved
值的数组,顺序与传入数组中的 Promise
顺序一致。
- 如果其中任何一个
Promise
变为 rejected
状态,新 Promise
就会立即 rejected
,并将第一个 rejected
的 Promise
的错误信息作为它的 reject
值。
async/await
语法糖使异步代码看起来更像同步代码。await
只能在 async
函数内部使用,它暂停 async
函数的执行,直到 await
后的 Promise
被解决(resolved
或 rejected
)。在上述示例中,await Promise.all([promise1, promise2, promise3])
等待所有并发的异步操作完成,然后将结果数组赋值给 results
,如果有错误则进入 catch
块处理。