При выполнении нескольких зависимых вызовов HTTP API с использованием RxJS общепринятым ответом является использование mergeMap () / flatMap () для объединения вызовов и завершения одного потока результатов. Мне интересно, почему mergeMap () является оператором выбора. Это на самом деле лучше или хуже, чем любой из 3 других операторов сплющивания? На мой взгляд, вы можете использовать любой из четырех (объединить, объединить, переключить или исчерпать) и в итоге получить те же результаты / надежность.
В Angular вы можете сделать звонок, например:
function getCall(id) {
return this.http.get<string>('http://www.apiurl.com/' + id);
}
Это будет только когда-либо возвращать одну наблюдаемую, которая испустит строковое значение. Так что-то вроде
getCall(1).pipe(
mergeMap(() => getCall(2))
).subscribe();
должен вести себя точно так же, как
getCall(1).pipe(
concatMap(() => getCall(2))
).subscribe();
, поскольку мы можем сделать предположение, что getCall(id)
только когда-либо возвращает ОДНУ наблюдаемую.
Так ли это на самом деле имеет значение, какой оператор выравнивания кто-то использует в контексте HTTP-вызова.