Javascript 确保在数组中同步执行嵌套数组(Promise.all-in Promise.all)

Javascript 确保在数组中同步执行嵌套数组(Promise.all-in Promise.all),javascript,asynchronous,promise,mean-stack,Javascript,Asynchronous,Promise,Mean Stack,我在确保在另一个数组中执行的数组的同步执行方面遇到了问题。第一个数组没有直接链接到“嵌套”数组-它只是确保第二个(“嵌套”)数组的执行次数与第一个数组的执行次数相同。文件 为了说明这个问题,这里是我正在谈论的代码 Promise.all( room.connections.map(connection => { Question.find({room: room.title}).then(questions => { return Promis

我在确保在另一个数组中执行的数组的同步执行方面遇到了问题。第一个数组没有直接链接到“嵌套”数组-它只是确保第二个(“嵌套”)数组的执行次数与第一个数组的执行次数相同。文件

为了说明这个问题,这里是我正在谈论的代码

  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会在迭代通过的两个连接之后立即解决,而不保证所有答案都已插入/保存。 最初,我试图在没有第一个承诺的情况下完成整个过程。all-但问题是“socket.emit”部分将执行两次(因为我的数组中通常有两个连接)。

最外层的lambda(
连接=>{…}
)有一个语句体(因为主体被花括号包围),但是不包含
return
语句,因此表达式
room.connections.map(…)
的计算结果是一个充满
未定义值的集合。类似于
Promise.all([undefined])
的东西会立即解决

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