У меня есть цикл 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 также не работает. Он также пропускает первый элемент.
Я попытался отладить и пройти, и кажется, что почтовый запрос не выполняется и ожидает завершения первого элемента. Он публикует только последний элемент в цикле. Что я должен реализовать, чтобы дождаться завершения первого почтового запроса для первого элемента, прежде чем переходить к следующему?
Вы можете попробовать реализовать асинхронное ожидание в своем сервисе. Если вы разместите свой сервисный код, я могу попытаться помочь.
@Абу Зафор. Это мой служебный код. addProductToOrder(orderProduct: OrderProduct) { return this.http.post(this.baseUrl + 'orderproducts/addproducttooreder/', orderProduct); }
Вы можете попробовать вот так:
@Абу Зафор. И как мне вызвать этот метод для моего компонента, так как теперь это обещание.
просто обычный звонок. не нужно подписываться. как this.productOrderSrv.addProductToOrder (cartProduct);
@Абу Зафор. Я сделал это, но теперь он не переходит к следующему пункту. Он публикует только первый элемент в цикле forEach.
Я решил проблему, отправив все элементы по одному в виде массива, а не по одному. Но я использовал асинхронное ожидание по совету @Abu Zafor. Спасибо.
Вы можете сначала попробовать использовать обычный цикл for и выяснить, что происходит.