Promise.all
在JavaScript中,Promise是一种处理异步操作的机制,而Promise.all是一个强大的工具,用于并行处理多个Promise。当所有Promise都成功时,Promise.all返回一个新的Promise,其状态为Fulfilled,并携带一个包含所有Promise成功结果的数组;如果任何一个Promise失败,Promise.all立即返回一个Rejected的Promise,并携带第一个失败的Promise的错误信息。
为什么需要Promise.all
在实际开发中,有些场景需要并行执行多个异步操作的情况。例如,同时从多个API获取数据、同时上传多个文件、同时读取本地多个文件。使用Promise.all可以非常方便地实现这一需求,提高代码的可读性和可维护性。
all的使用
Promise.all(iterable);
iterable: 一个可迭代对象(一般是一个数组),包含多个Promise对象。
1. 并行获取天气信息、新闻信息和股票信息
// 模拟异步操作:获取天气信息
function fetchWeather() {
return new Promise((resolve) => {
setTimeout(() => {
resolve({
weather: "Sunny", temperature: 30 });
}, 1000);
});
}
// 模拟异步操作:获取新闻信息
function fetchNews() {
return new Promise((resolve) => {
setTimeout(() => {
resolve(["新闻1", "新闻2", "新闻3"]);
}, 2000);
});
}
// 模拟异步操作:获取股票信息
function fetchStocks() {
return new Promise((resolve) => {
setTimeout(() => {
resolve({
stock: "AAPL", price: 150 });
}, 1500);
});
}
// 使用Promise.all并行处理这些异步请求
Promise.all([fetchWeather(), fetchNews(), fetchStocks()])
.then((results) => {
const [weather, news, stocks] = results;
console.log("天气信息: ", weather);
console.log("新闻信息: ", news);
console.log("股票信息: ", stocks);
})
.catch((error) => {
console.error("出错了: ", error);
});
2. 并行读取多个文件内容
假设我们有三个文件:file1.txt、file2.txt、file3.txt&