Вам не нужно подписываться внутри оператора mergeMap
.
Идея mergeMap / flatMap заключается в выравнивании цепочки наблюдаемых.Например, если вы сделали это так:
const source = Rx.of('Hello');
source.map(val => doOperationThatReturnsObservable(val)).map(f)
Функция f
получит Observable
.
Если вы сделали это так:
const source = Rx.of('Hello');
source.mergeMap(val => doOperationThatReturnsObservable(val)).map(f)
Функция f
получит значение второй наблюдаемой.Другими словами, mergeMap, concatMap, swichtMap - это функции, которые позволяют комбинировать наблюдаемые или отображать значения в наблюдаемые, сохраняя при этом поток данных.
Для конкретной проблемы, которую вы описали, я думаю, вы могли бы решить так:
const firstApiCall = createFirstApiCallObservable();
const secondApiCall = firstApiCall.mergeMap(data => createSecondApiCallObservableFromData(data));
// If you need to do the updates in the same time:
Observable.zip(firstApiCall, secondApiCall,
(data1, data2) => [data1, data2])
.subscribe(data => {
data1 = data[0];
data2 = data[1];
doFirstUpdate(data1);
doSecondUpdate(data2);
});
// If you can do the updates separatly:
firstApiCall.subscribe(data1 => doFirstUpdate(data1));
secondApiCall.subscribe(data2 => doSecondUpdate(data2));