Использование обещаний для одновременной обработки в памяти - PullRequest
1 голос
/ 13 марта 2019

У нас есть проект, в котором нам нужно обработать ~ 5000 объектов, и каждый объект обрабатывается по 200-500 миллисекунд. Разработчик из моей команды предложил использовать обещания, чтобы попытаться обработать каждый объект одновременно. В общем, как-то так:

let result = await Promise.all(objects.map(o => process(o));

Код process() может выглядеть следующим образом:

async process(theObject) {
  return new Promise(resolve => {
    1 + 1 = 2;
    resolve();
  });
}

Несмотря на то, что это похоже на честный шаблон, оно похоже на анти-шаблон или запах кода. Также кажется, что Node / V8 обрабатывает обещания, что может привести к серьезным проблемам позже. У кого-нибудь есть мысли по поводу этого паттерна и может ли он быть полезным / менее?

1 Ответ

0 голосов
/ 13 марта 2019

Одним из предостережений использования Promise.all() является то, как он обрабатывает ошибки. Из MDN :

Он отклоняет причину первого обещания, которое отклоняет.

Так что, если одна ошибка обработки из ~ 5000 объектов останавливает весь процесс, все в порядке, то это похоже на достойный инструмент. Я бы порекомендовал настроить очередь, чтобы отделить обработку от оркестровки сообщений, а также обеспечить преимущества масштабируемости.

...