确保在数组中同步执行嵌套数组(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 的集合作为参数。