Запросы HTTP POST в цикле foreach в angular 6 пропускают первый элемент

У меня есть цикл forEach, который отправляет HTTP-запросы для каждого элемента в цикле, но по неизвестной причине пропускает первый элемент. Что я могу делать неправильно? Вот код:

this.shoppingCartProducts.forEach(cartProduct => {
  this.productOrderSrv.addProductToOrder(cartProduct)
            .subscribe((result) => {
              console.info(cartProduct);
            }, error => {
              // error has occured
            });
}

productOrderSrv.addProductToOrder вызывает почтовый запрос http, который представляет собой службу, внедренную в этот компонент.

Я также пытался реализовать метод forkJoin rxjs, но он также пропускает первый элемент (в данном случае cartProduct).

Пожалуйста, дайте мне некоторую информацию о том, что я могу делать неправильно или упустить.

Вы можете сначала попробовать использовать обычный цикл for и выяснить, что происходит.

Zafor 23.01.2019 09:18

позвольте мне попробовать и посмотреть, работает ли это

Stephen Mutua 23.01.2019 09:31

Цикл for также не работает. Он также пропускает первый элемент.

Stephen Mutua 23.01.2019 10:24

Я попытался отладить и пройти, и кажется, что почтовый запрос не выполняется и ожидает завершения первого элемента. Он публикует только последний элемент в цикле. Что я должен реализовать, чтобы дождаться завершения первого почтового запроса для первого элемента, прежде чем переходить к следующему?

Stephen Mutua 23.01.2019 10:36

Вы можете попробовать реализовать асинхронное ожидание в своем сервисе. Если вы разместите свой сервисный код, я могу попытаться помочь.

Zafor 23.01.2019 11:55

@Абу Зафор. Это мой служебный код. addProductToOrder(orderProduct: OrderProduct) { return this.http.post(this.baseUrl + 'orderproducts/addproducttooreder/', orderProduct); }

Stephen Mutua 23.01.2019 12:03

Вы можете попробовать вот так:

Zafor 23.01.2019 12:05

@Абу Зафор. И как мне вызвать этот метод для моего компонента, так как теперь это обещание.

Stephen Mutua 23.01.2019 12:16

просто обычный звонок. не нужно подписываться. как this.productOrderSrv.addProductToOrder (cartProduct);

Zafor 23.01.2019 12:18

@Абу Зафор. Я сделал это, но теперь он не переходит к следующему пункту. Он публикует только первый элемент в цикле forEach.

Stephen Mutua 23.01.2019 12:30

Я решил проблему, отправив все элементы по одному в виде массива, а не по одному. Но я использовал асинхронное ожидание по совету @Abu Zafor. Спасибо.

Stephen Mutua 23.01.2019 12:58
Стоит ли изучать PHP в 2023-2024 годах?
Стоит ли изучать PHP в 2023-2024 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
1
11
174
0

Другие вопросы по теме