#angular #typescript
Вопрос:
Я обновляю большой список товаров и устанавливаю цены.
для…
currentItem.attributes.menuItemPrice10 = currentItem.attributes.menuItemPrice1 .28;
await this.menuItemsService.save(currentItem);
Это работает нормально, но Angular, похоже, имеет ограниченные возможности потоковой передачи.
Если я отключу ожидание, то он просто взорвется в списке, но, проверяя журналы, он не обновляет все — так что похоже, что он отказывается от некоторых обновлений, потому что я этого не ждал, верно?
Итак, альтернативой, по — видимому, являются веб-работники, но в нем говорится, что это не поддерживает запуск «самого себя» в качестве веб-работника и имеет некоторые ограничения платформы. Не уверен, что это значит, поэтому ищу лучшие практики о том, как это ускорить?
Спасибо
Комментарии:
1. Вы подумали
Promise.all
, я на самом деле не уверен, сработает ли это, но я думаю, что сопоставление ваших товаров с обещаниями обновлений может сократить это…2. Насколько велик этот список? Что делает функция сохранения? Вы показываете список в пользовательском интерфейсе или просто сохраняете его в БД или бэкэнде?
3. Обещаю.все — нет, не знал об этом, так что, глядя на это. Вероятно, ~2000 строк за запуск, да, внутренний микросервис сохраняется в БД, не показывая список во время его запуска.
Ответ №1:
Я предполагаю save
, что это асинхронная операция, например, сетевой запрос. Если он действительно использует что-то подобное fs.writeFileSync
, что блокирует весь процесс, то вы не сможете его ускорить.
Есть Обещание.все это позволяет вам ждать, пока множество Обещаний не будет выполнено. Объедините это с .map
, и вы сможете выполнять массовые операции со списками элементов:
await Promise.all(items.map(item => this.menuItemService.save(item)));
// or if it's just a hardcoded small amount of operations:
await Promise.all([
this.menItemService.save(previousItem),
this.menItemService.save(currentItem),
this.menItemService.save(nextItem),
]);