Эта реализация должна работать, она каждую секунду проверяет наличие свободного работника, и если он его находит, работник возвращается обратно.
const getIdleWorker = () => {
return new Promise(resolve => {
const findFreeWorker = () => {
for (let i = 0; i < workers.length; i++) {
const worker = workers[i]
if (worker.isReady()) {
return worker;
}
}
return null
}
const searchFor = setInterval(() => {
const freeWorker = findFreeWorker()
if (freeWorker) {
clearInterval(searchFor)
resolve(freeWorker)
}
}, 1000)
})
}
Проблема была в while (true) {
, который блокировал цикл событий, поэтому Node.js застрял, выполняя этот кусок кода навсегда, добавляя async
, пытаясь вернуть только Promise, но код находился в бесконечном цикле.
Здесь вы можете найти хорошую статью, чтобы лучше понять асинхронный шаблон Node.js