javascript - 等待map完成运行以执行最终调用

标签 javascript

正如问题所说,我正在尝试等待 map 完成执行,然后再运行另一个命令。在本例中控制台日志。我有

let concernsInDB = [];
let ctr = 0;

    this.state.templateOptions.map(el => {
      el.details.map(elDetail => {
        this.getConcernsDB(elDetail.values)
        .then(elDetailResults => {
          let detailsToPush = {};
          if(elDetailResults.length) {
            detailsToPush[elDetailResults[0].value_id] = elDetailResults;
            concernsInDB.push(detailsToPush);
          }
        })
      })
    })
    console.log(concernsInDB);

执行上面的代码,我得到一个 Array[] 的 console.log。在所有其他方法完成之前,console.log 正在解析。

this.state.templateOptions 包含一个由多个对象组成的数组(大约 50 个,所以我不会将所有对象都放在这里):

 Object {
    "active": 1,
    "id": 1378,
    "name": "Wires are running through trees",
    "narrative": "Service drop wires are running through tree(s).It is recommended to have a contacting utility company or a qualified electrician and/or tree s",vice company to correct conditions as necessary.
    "value_id": 13935,
  },

当我循环遍历它们时,我运行这个方法:this.getConcernsDB(elDetail.values) elDetail.values 是上面示例中的“value_id”。然后我等待它解决。然后将结果推送到关注点数据库中。这必须在多个记录上完成。在 console.logging 关注 InDB 之前我将如何等待这一切完成,以便它拥有所有已完成的数据?

如果我将它包装在一个 promise 中,解析将在每个循环上运行,所以我不知道如何完成它。有什么解决办法吗?

最佳答案

您想要使用 Promise.all(两次)来等待所有基于 Promise 的异步完成

您还想在 .map 中返回一些内容,否则您将使用 .forEach (尽管在本例中 .map 是正确的方法)

let concernsInDB = [];
let ctr = 0;

Promise.all(this.state.templateOptions.map(el => 
    Promise.all(el.details.map(elDetail => 
        this.getConcernsDB(elDetail.values)
        .then(elDetailResults => {
            let detailsToPush = {};
            if (elDetailResults.length) {
                detailsToPush[elDetailResults[0].value_id] = elDetailResults;
                concernsInDB.push(detailsToPush);
            }
        })
    ))
)).then(() => {
    console.log(concernsInDB);
});

关于javascript - 等待map完成运行以执行最终调用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59621316/

相关文章:

javascript - 在JavaScript中使用加密技术有哪些合理的方案?

javascript - 如果变量是 "something"如何简化这个测试?

javascript - HTML5 Canvas 变形

javascript - 如何访问从 Promise.all() 返回的 key

javascript - Bookmarklet、js注入(inject)和弹出问题

javascript - 曾经工作但最近在 Chrome 中坏了

javascript - 使用 CoffeeScript 编写 document.write

javascript - Chrome 开发工具 - 我的 javascript 被切断

javascript - 在 javascript 中制作一个带有事件菜单的菜单吗?

javascript - onLoad 点击函数 - 随机