gpt4 book ai didi

javascript - 确保数组内嵌套数组的同步执行(Promise.all - 在 Promise.all 中)

转载 作者:行者123 更新时间:2023-12-02 22:13:31 26 4
gpt4 key购买 nike

我在确保在另一个数组中执行的数组同步执行时遇到问题。第一个数组不直接链接到“嵌套”数组 - 它只是确保第二个(“嵌套”)数组执行多次,就像第一个数组有记录一样。文件。

为了说明问题 - 这是我正在讨论的代码

  Promise.all(
room.connections.map(connection => {
Question.find({room: room.title}).then(questions => {
return Promise.all(
questions.map(question => {
if (question.answers.length !== 2) {
question.answers.push({ email: connection.userId, own: "", guess: "" });
console.log('SAVE ANSWER');
return question.save();
}
}),
)
});
})
).then(() => {
console.log('SENDING GAME READY TO BOTH!!! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!');
io.of("/game")
.in(room.title)
.emit("GameReady", true);
ack(false);
})

正如您所见 - 我正在将答案插入到问题数组中。除此之外,应该插入尽可能多的答案,因为我在另一个集合中有活跃的连接。我已经尝试了上面的代码,但显然,一旦两个连接被迭代,第一个 Promise.all 就会解析 - 而不确保所有答案都已被插入/保存。我最初尝试在没有第一个 Promise.all 的情况下完成整个事情 - 但有一个问题是“socket.emit”部分将被执行两次(因为我的数组中通常有 2 个连接)。

最佳答案

最外面的 lambda (connection => { ... }) 有一个语句主体(因为主体被大括号包围),但不包含 return code> 语句,因此表达式 room.connections.map(...) 计算结果为充满 undefined 值的集合。像 Promise.all([ undefined ]) 这样的东西会立即解析。

尝试从外部 lambda 返回 Question.find(...)。这样,对 Promise.all 的最外层调用将接收一个正确填充了 Promise 的集合作为参数。

关于javascript - 确保数组内嵌套数组的同步执行(Promise.all - 在 Promise.all 中),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59473898/

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