Javascript异步获取循环内的请求

标签 javascript node.js asynchronous

我有一个如下所示的对象数组:

[ { firstName: 'Mike', lastName: 'Jones' },
  { firstName: 'Joe', lastName: 'Smith' },
  { firstName: 'Bob', lastName: 'Johnson' } ]

我需要将该数组传递给一个函数,该函数将向每个对象添加一个“middleName”字段以及 middleName 的值。该函数通过在 Node 中发出异步 http.get 请求来获取中间名。问题就在这里。无论我如何尝试,我都无法完成这项工作。

之前有人建议了这样的循环:

array.forEach(function (obj) {
        GetMiddleName(obj, function (person) {
            obj.MiddleName = person;
        });
    });

但是由于在 GetMiddleName 函数中调用 get 的异步性质,这不起作用。 谁能告诉我一个简短的函数来满足我的需要?

最佳答案

创建一个 Promise 数组,在该数组上调用 Promise.all,然后向每个 Promise 插入中间名:

const getMiddleNameProm = obj => new Promise((resolve) => {
  GetMiddleName(obj, resolve);
});
Promise.all(arr.map(getMiddleNameProm))
  .then((middleNames) => {
    for (let i = 0; i < middleNames.length; i++) {
      arr[i].MiddleName = middleNames[i];
    }
    // do stuff with populated arr here
  });
});

关于Javascript异步获取循环内的请求,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59786513/

相关文章:

javascript - Bootstrap Popover 为整个表单发出隐藏事件

javascript - 在不使用 javascript 中的闭包的情况下传递给函数之前转换参数

javascript - jquery过滤器搜索应根据文本选择匹配的DIV

javascript - 使用 sails.js 中的钩子(Hook)生成的数据

node.js - 如何设置每月的 Node 计划

javascript - 在 javascript 函数中传递对象 - 对象未定义

mysql - 在依赖于顺序响应的 MySQL 的两个查询之间注入(inject) API 调用

c# - 为什么我的 IOCompetionCallback 从未在我的 IO 完成端口上执行?

asynchronous - 可以使用命令的 gvim 远程选项卡吗?

django - 可以在 django 中异步执行数据库操作吗?