Я обрабатываю большое количество заданий, а затем записываю их в базу данных. Рабочий процесс является то, что:NodeJS: Нарушение большого количества синхронных задач в задачах async
- Читайте о
100 MB
данных в буфер - Loop через данные, а затем обработать (синхронизации работы) и запись на диск (асинхронная работа)
Проблемы Я имея это, он завершит цикл по всем 100 MB
данных и тем временем поставит в очередь всю запись на диск за циклом событий. Таким образом, он сначала перебирает все данные, а затем запускает работу async.
Я хотел бы разбить синхронную задачу итерации по массиву, чтобы каждая итерация попадала в очередь за циклом события.
var lotsOfWorkToBeDone = ['tens of thousands of job', 'tens of thousands of job', 'tens of thousands of job', 'tens of thousands of job', 'tens of thousands of job', 'tens of thousands of job', 'tens of thousands of job']
while (true) {
var job = lotsOfWorkToBeDone.pop()
if (!job) {
break
}
var syncResult = syncWork(job)
asyncWork(syncResult)
}
function syncWork(job) {
console.log('sync work:', job)
return 'Sync Result of ' + job
};
function asyncWork(syncResult) {
setTimeout(function() {
console.log('async work: ', syncResult)
}, 0)
}
// Desire Outcome
// sync work: tens of thousands of job
// async work: Sync Result of tens of thousands of job
// sync work: tens of thousands of job
// async work: Sync Result of tens of thousands of job
// sync work: tens of thousands of job
// async work: Sync Result of tens of thousands of job
// sync work: tens of thousands of job
// async work: Sync Result of tens of thousands of job
// sync work: tens of thousands of job
// async work: Sync Result of tens of thousands of job
// sync work: tens of thousands of job
// async work: Sync Result of tens of thousands of job
// sync work: tens of thousands of job
// async work: Sync Result of tens of thousands of job
// Actual Outcome
// sync work: tens of thousands of job
// sync work: tens of thousands of job
// sync work: tens of thousands of job
// sync work: tens of thousands of job
// sync work: tens of thousands of job
// sync work: tens of thousands of job
// sync work: tens of thousands of job
// async work: Sync Result of tens of thousands of job
// async work: Sync Result of tens of thousands of job
// async work: Sync Result of tens of thousands of job
// async work: Sync Result of tens of thousands of job
// async work: Sync Result of tens of thousands of job
// async work: Sync Result of tens of thousands of job
// async work: Sync Result of tens of thousands of job
Примечание: пример упрощенной версии реальности. У меня нет массива, через который я могу выполнить итерацию. И у меня есть большой буфер, и я обрабатываю до EOF (следовательно, цикл while)
Не удается выполнить задание для построения массива с элементами буфера, а затем повторить итерацию этого массива с помощью async.foreach? – fmodos
Собственно, это может быть хорошей идеей. – samol
Да, я думаю, что это единственное решение, потому что кажется, что вы не можете перебирать буфер асинхронным способом, дайте мне знать, если он работает, а затем я могу отправить ответ – fmodos