如何等待异步地图功能?

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 似乎有效。你能帮我让它工作或者建议一些其他可能的解决方案吗?提前致谢!

你基本上有两个问题:

  1. 您忽略了 map
  2. 的 return 值
  3. 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);
})));