确保在数组中同步执行嵌套数组(Promise.all - 在 Promise.all 中)
Assure synchronous execution of nested Arrays within arrays (Promise.all - in Promise.all)
我在确保同步执行在另一个数组中执行的数组时遇到问题。第一个数组不是直接 link 到 "Nested" 数组——它只是确保第二个 ("nested") 数组被执行的次数与第一个数组的 recrods resp 一样多。文档。
为了说明问题 - 这是我正在谈论的代码
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 解决了,只要两个连接迭代通过 - 不确保所有答案都已经 inserted/saved。
我最初尝试在没有第一个 Promise.all 的情况下制作整个东西 - 但是遇到 "socket.emit" 部分将被执行两次的问题(因为我的数组中通常有 2 个连接)。
最外层的 lambda (connection => { ... }
) 有一个语句主体(因为主体被花括号包围),但不包含 return
语句,所以表达式 room.connections.map(...)
正在计算一个包含 undefined
个值的集合。像 Promise.all([ undefined ])
这样的事情会立即解决。
尝试从外部 lambda 返回 Question.find(...)
。这样,对 Promise.all
的最外层调用将接收一个正确填充了 promise 的集合作为参数。
我在确保同步执行在另一个数组中执行的数组时遇到问题。第一个数组不是直接 link 到 "Nested" 数组——它只是确保第二个 ("nested") 数组被执行的次数与第一个数组的 recrods resp 一样多。文档。
为了说明问题 - 这是我正在谈论的代码
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 解决了,只要两个连接迭代通过 - 不确保所有答案都已经 inserted/saved。 我最初尝试在没有第一个 Promise.all 的情况下制作整个东西 - 但是遇到 "socket.emit" 部分将被执行两次的问题(因为我的数组中通常有 2 个连接)。
最外层的 lambda (connection => { ... }
) 有一个语句主体(因为主体被花括号包围),但不包含 return
语句,所以表达式 room.connections.map(...)
正在计算一个包含 undefined
个值的集合。像 Promise.all([ undefined ])
这样的事情会立即解决。
尝试从外部 lambda 返回 Question.find(...)
。这样,对 Promise.all
的最外层调用将接收一个正确填充了 promise 的集合作为参数。