Хорошо, что вы спрашиваете, так как это распространенная проблема.
Рассмотрите что-то вроде
service.cal1().subscribe(val => {
service.call2(val).subscribe( res => {
*does things*
}
}
То, что вы запускаете, это новая подписка (и, следовательно, новый исполняемый канал) длякаждое значение a any, которое излучается Observable, равным call1()
. Это может оставить вас с сотнями необработанных Observables и подписок, которые все остаются в памяти на некоторое время.
Вы должны знать, что когда вы несколько раз набираете subscribe()
в Observable, ваши подписчики не будут слушатьточно такой же источник, вместо этого все они вызывают новую копию вашего определенного наблюдаемого конвейера.
Как указано в первом примере в Observable Docu
Observable, которое сразу же (синхронно) толкает значения 1, 2, 3 при подписке
Подчеркните мое
Наблюдаемый ничего не делает сам по себе, но начинает весь путь всякий раз, когда подписывается
Вот почему вы пытаетесь использовать что-то вроде switchMap () для перехода на другой вызов, вместо того, чтобы оставить исходную подписку как есть.