gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-02 22:08:54 24 4
gpt4 key购买 nike

正如问题所说,我正在尝试等待 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/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com