У меня есть проблема в обеспечении синхронного выполнения массива, который выполняется в другом массиве. Первый массив НЕ является прямой ссылкой на «вложенный» — он просто гарантирует, что второй («вложенный») массив выполняется столько раз, сколько первый имеет повторы соответственно. документы.

Чтобы проиллюстрировать проблему — вот код, о котором я говорю

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

Итак, как вы видите — я вставляю ответы в массив вопросов. Кроме того, должно быть вставлено столько ответов, сколько у меня активных соединений в другой Коллекции. Я попробовал приведенный выше код, но, очевидно, первое обещание. Все разрешается, как только два соединения были перебраны — без уверенности, что все ответы уже вставлены / сохранены. Первоначально я пытался сделать все это без первого Promise.all — но у меня была проблема, что часть «socket.emit» будет выполняться дважды (потому что у меня обычно 2 соединения в моем массиве).

Самая внешняя лямбда ( connection ={amp}gt; { ... } ) имеет тело оператора (потому что тело окружено фигурными скобками), но не содержит оператора return , поэтому выражение room.connections.map(...) оценивает коллекцию, полную undefined значений. И что-то вроде Promise.all([ undefined ]) немедленно разрешится.

Попробуйте вернуть Question.find(...) из внешней лямбды. Таким образом, внешний вызов Promise.all получит в качестве аргумента коллекцию, которая правильно заполнена обещаниями.