gpt4 book ai didi

javascript - Node promise 循环等待结果

转载 作者:行者123 更新时间:2023-12-03 06:08:00 25 4
gpt4 key购买 nike

如何等待 for 循环进入下一个循环?

如何确保 userdetails 已执行,并且 realresult.playername 在传递之前已分配给新变量?

代码:

return new Promise( function (resolve, reject) {

arr = [];


messages.find({convid: convid}).then(function(result) {

for(var a in result) {
realresult = result[a];

userData.userDetails(realresult.userid).then(function (result) {
realresult.playername = result.username;
});
userData.usercashinfo(realresult.userid).then(function (resulttwo) {
realresult.playerdetails = resulttwo;
});

arr.push(realresult);

}

return resolve(arr);
});
});

最佳答案

您正在尝试编写一个 promise ,当它解析时,返回已解析的 promise 值的数组。您应该在这里做两件事:

  1. 使用return等待promise的完成。在 promise 链中,除非返回,否则没有任何东西可以真正解析 promise 值。 (您还应该将其用于 message.find(),因为它也给了您一个 promise 。)
  2. 将数组构造为 Promise 数组,而不是迭代并在解析时将 Promise 插入数组。
  3. 使用 Promise.all() 收集 Promise 对象 - all() 仅在传递给它的所有 Promise 都已解析后返回。
  4. (可选)不要重复使用 result 变量名称来表示多种含义。这里并没有错,但可能会引起不必要的困惑。

放在一起,看起来像这样:

return messages.find(...).then(function(result) {
var promiseArr = [];
for (var a in result) {
promiseArr.push(
promise.all([userData.userDetails(...), userData.usercashinfo(...)])
.then(function(detailinfo) {
var realresult = result[a];
var details = detailinfo[0];
var cashinfo = detailinfo[1];
realresult.playername = details.username;
realresult.playerdetails = cashinfo;
return realresult;
});
}
return Promise.all(promiseArr);
});

关于javascript - Node promise 循环等待结果,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39450392/

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