Intereting Posts
Проверьте, является ли stream process.stdout Увеличивает ли Node.js переменные окружения для каждого HTTP-запроса? «реакции-скрипты» не распознаются как внутренняя или внешняя команда Ошибка Node.js http.request с ошибкой Подавать активы перед другими маршрутами предварительное обновление промежуточного ПО Mongoose SocketIO- GET http: // localhost: 3000 / socket.io /? EIO = 3 & transport = polling & t = 1418187395022-0 404 (не найдено) Как реализовать многократные функции обратного вызова Сам узел может обслуживать статические файлы без выражения или любого другого модуля.? mongoose db.stats () эквивалент Nodejs и PassportJs: перенаправить промежуточное программное обеспечение после паспорта. Authenticate не вызывается, если аутентификация завершается неудачно GET Ajax возвращает html-код в ответ вместо json-объекта Как обрабатывать уникальное поле в парусах? Поиск ближайших точек к определенной точке с учетом ее координат и максимального расстояния – результат запроса Неопределенный с использованием Mongoose с MEAN Stack Capture node.js причина сбоя

Параллельные операции с Promise.all?

Я убежден в том, что Promise.all выполняет все функции, которые вы передаете ему параллельно, и не волнует, какой заказ вернули обещания.

Но когда я пишу этот тестовый код:

function Promise1(){ return new Promise(function(resolve, reject){ for(let i = 0; i < 10; i++){ console.log("Done Err!"); } resolve(true) }) } function Promise2(){ return new Promise(function(resolve, reject){ for(let i = 0; i < 10; i++){ console.log("Done True!"); } resolve(true) }) } Promise.all([ Promise1(), Promise2() ]) .then(function(){ console.log("All Done!") }) 

В результате я получаю

 Done Err! Done Err! Done Err! Done Err! Done Err! Done Err! Done Err! Done Err! Done Err! Done Err! Done True! Done True! Done True! Done True! Done True! Done True! Done True! Done True! Done True! Done True! Done! 

Но если они будут работать параллельно, я не ожидаю, что они будут выполняться одновременно и дать мне такой результат?

 Done Err! Done True! Done Err! Done True! Done Err! Done True! Done Err! Done True! Etc. Etc.? 

Или я что-то пропущу, как я это делаю?

Это потому, что ваши обещания блокируются и синхронны! Попробуйте что-то с таймаутом вместо синхронного цикла:

 function randomResolve(name) { return new Promise(resolve => setTimeout(() => { console.log(name); resolve(); }, 100 * Math.random())); } Promise.all([ randomResolve(1), randomResolve(2), randomResolve(3), randomResolve(4), ]) .then(function(){ console.log("All Done!") }) 

Неасинхронное тело выполняется последовательно. Когда вы достигнете вызова Async внутри вашего тела (например, удалите URL-адрес), начнут выполняться другие обещания в массиве.