У меня есть метод exampleMethod()
, который возвращает результат двух последовательных вызовов службы (getData1()
и getData2()
), тогда как getData2()
должен изменить данные, возвращенные getData1()
, до того, как exampleMethod()
вернется. В настоящее время вызов вложенной службы выполняется после того, как мы уже вернулись из exampleMethod()
, и это слишком поздно. Я знаю, что вызов подписки внутри другого наблюдаемого объекта является плохой практикой и может быть причиной проблемы, поэтому я спрашиваю, как правильно это сделать. Пример кода ниже. Спасибо!
exampleMethod() {
return this.myService.getData1()
.pipe(
map(res => {
res.orders = someValue;
return res;
}),
map(res => {
res.orders.forEach((order: any) => {
this.myService.getData2()
.pipe(
tap((orders: any[]) =>
order.status = orders.find(o=> o.number === order.number).status // <<====== this resolves after we've already returned from exampleMethod()
)
).subscribe();
});
return res; // <<====== status value of res.orders not set
})
);
}
concatMap
илиmergeMap
, а может быть, и наforkJoin
- person martin   schedule 16.01.2021map()
наswitchMap()
и избавлюсь отsubscribe()
, я получаю: ERROR TypeError: Вы указали недопустимый объект там, где ожидался поток. Вы можете предоставить Observable, Promise, Array или Iterable - person bigb055   schedule 16.01.2021