在处理数组或对象的异步迭代时,最聪明/最干净的方法通常是使用现代JavaScript中的Promise.all
结合Array.prototype.map
。这种方法可以并行处理所有的异步操作,并且代码结构清晰。
Promise.all
允许所有异步操作并行执行,而不是顺序执行,这样可以显著提高性能。map
方法,可以使代码更加简洁和易读。async function fetchData(urls) {
try {
const promises = urls.map(url => fetch(url));
const responses = await Promise.all(promises);
const data = await Promise.all(responses.map(response => response.json()));
return data;
} catch (error) {
console.error('Error fetching data:', error);
}
}
// 使用示例
const urls = [
'https://api.example.com/data1',
'https://api.example.com/data2',
'https://api.example.com/data3'
];
fetchData(urls).then(data => {
console.log('Fetched data:', data);
});
async function fetchUserData(users) {
try {
const promises = Object.keys(users).map(async key => {
const user = users[key];
const response = await fetch(`https://api.example.com/user/${user.id}`);
const userData = await response.json();
return { key, ...userData };
});
const data = await Promise.all(promises);
return Object.fromEntries(data.map(item => [item.key, item]));
} catch (error) {
console.error('Error fetching user data:', error);
}
}
// 使用示例
const users = {
1: { id: 1 },
2: { id: 2 },
3: { id: 3 }
};
fetchUserData(users).then(data => {
console.log('Fetched user data:', data);
});
如果在异步迭代过程中遇到问题,首先要确定问题的类型:
async/await
和for...of
循环来控制执行顺序。通过上述方法和示例代码,可以有效地处理数组或对象的异步迭代,并解决可能遇到的问题。
领取专属 10元无门槛券
手把手带您无忧上云