Я ищу эффективный способ в Bluebird (или, по необходимости, на основе Promise), чтобы запустить параллельный массив обещаний и вернуть их по мере их завершения. Наверное, почти как блокировка очереди.Параллельный возврат обещаний в порядке
Итак, если у меня есть массив из 5 функций, функция 1 может принимать 150 мс, функция 2 может принимать 50 мс, функция 3 может принимать 50 мс и т. Д. Все 5 функций вызывают параллельно, но возвращаемые значения обратного вызова будут отвечать только в заказ, который я укажу. В идеале что-то вроде этого:
Promise.parallelLock([
fn1(),
fn2(),
fn3(),
fn4(),
fn5()
])
.on('ready', (index, result) => {
console.log(index, result);
})
.then(() => {
console.log('Processed all');
})
.catch(() => {
console.warn('Oops error!')
});
Я думаю, что смогу выполнить это с помощью сопрограмм Bluebird? Просто возникают проблемы с выбором структуры, которая имеет наибольшее значение/больше всего соответствует моему приведенному выше примеру.
Хммм, так .TAP() будет выполняться только в той последовательности, что я указал? Итак, если fn5() заканчивается первым, он будет ждать, пока fn1-4 не будут завершены, следовательно, сохранив мою последовательность? Если это так ... хорошо, это было легко: -p – ddibiase
'tap' не будет, если вы хотите, чтобы он последовал так, вы можете' .each' '.taps' вместо' .map' их. 'Promise.each ([fn1(), ....], x => x.tap (...))' (с bluebird или с '.reduce' в других библиотеках обещаний. –
Это не правда net me результат, на который я надеюсь? – ddibiase