如何等待异步地图功能?
How to await asynchronous map function?
让我快速进入正题。我有一个获取一些用户 ID 的函数。效果很好。
const allIds = await fetchAllIds(someUrl);
当我想做一些不同的事情时,问题就来了。我想遍历这些 id 并用它们做一些异步等待的事情。也就是主要是用axios给每个取一些数据,然后做相应的修改。
allIds.map(async (id) => {
// 1. Fetch some data (try, catch and await)
// 2. Modify the id based on that data
// 3. Return the id, namely replace the old one
});
在我的代码末尾,我只是 return allIds
。问题是它 return 没有等待 map 函数完全执行就对它们进行了处理。我尝试了不同的方法,none 似乎有效。你能帮我让它工作或者建议一些其他可能的解决方案吗?提前致谢!
你基本上有两个问题:
- 您忽略了
map
的 return 值
map
将 return 一个 Promise 数组,您不会 await
全部使用它们
所以:
const promises = allIds.map(...);
const replacement_ids = await Promise.all(promises);
return replacement_ids;
改用这个。
const newList = await Promise.all(allIds.map(id=>new Promise(async(res)=>{
// do your async here and get result;
res(result);
})));
让我快速进入正题。我有一个获取一些用户 ID 的函数。效果很好。
const allIds = await fetchAllIds(someUrl);
当我想做一些不同的事情时,问题就来了。我想遍历这些 id 并用它们做一些异步等待的事情。也就是主要是用axios给每个取一些数据,然后做相应的修改。
allIds.map(async (id) => {
// 1. Fetch some data (try, catch and await)
// 2. Modify the id based on that data
// 3. Return the id, namely replace the old one
});
在我的代码末尾,我只是 return allIds
。问题是它 return 没有等待 map 函数完全执行就对它们进行了处理。我尝试了不同的方法,none 似乎有效。你能帮我让它工作或者建议一些其他可能的解决方案吗?提前致谢!
你基本上有两个问题:
- 您忽略了
map
的 return 值
map
将 return 一个 Promise 数组,您不会await
全部使用它们
所以:
const promises = allIds.map(...);
const replacement_ids = await Promise.all(promises);
return replacement_ids;
改用这个。
const newList = await Promise.all(allIds.map(id=>new Promise(async(res)=>{
// do your async here and get result;
res(result);
})));