Мне нужно организовать параллельный гоночный процесс функций Func1
a Func2
и разрешить главное, когда будет решена самая быстрая функция.Как создать одновременные вызовы функций с использованием обещаний bluebird?
const Promise = require('bluebird')
const Func1 = require('./functions/func1')
const Func2 = require('./functions/func2')
let functions = [
Func1(25),
Func2(40)
]
Promise.any(functions).spread(response => {
console.log(response)
})
И обе функции выглядит
const Promise = require('bluebird')
module.exports = function(data) {
return new Promise((resolve, reject) => {
let sum = 0
// SOME SLOW OPERATION FOR TEST
for (var i = 1; i <= 1000000000; i++) {
sum += i * data
}
resolve(sum)
})
}
Но с этим кодом функции выполняются синхронно. И я хочу, чтобы они обрабатывали параллельно в разделе Promise.any
. Как мне переписать мой код, чтобы сделать это? Я пытался обернуть функции в process.nextTick
, но этот намек тоже не работает.
Спасибо за ответ! Но как я могу отправить работу из основного процесса другим вилам/работникам? Или я должен поместить мои рабочие функции за http-запросы? – mikatakana
@mikatakana - Существует много способов взаимодействия между процессами и много разных способов создания очереди заданий. Когда вы начинаете дочерний процесс, вам передается поток stdin и stdout, который поступает от ребенка. Вы можете использовать это или вы можете попросить вашего ребенка новое задание от вас на известном порту через http всякий раз, когда он готов к другому заданию. Или, возможно, сотню других проектов. – jfriend00
@mikatakana - Это ответ на ваш вопрос? – jfriend00