UnsubscriptionError: RangeError: Превышен максимальный размер стека вызовов - PullRequest
0 голосов
/ 14 октября 2019

В моем приложении angular 8 я подписываюсь на наблюдаемую, которая должна сливаться с другой наблюдаемой для данного набора входных наблюдаемых, заканчивающихся в массивах.

Код выглядит следующим образом:

const obs1 = Observable.of([1,2,3]);
const obs2 = Observable.of([4,5,6]);
const obs3 = Observable.of([7,8,9]);

const obs = [obs1, obs2, obs3]; // obs1-3 are three observables
from(obs).pipe(
  mergeAll(),
  mergeMap(res => res.map(val => functionReturningAnObservable(val))),
  mergeAll(),
  finalize(() => someSideAction())
).subscribe();

Код работает нормально. Однако мой вызов завершения завершается сбоем из-за превышения размера стека вызовов (побочное действие не особенно легкое). Это происходит, когда я увеличиваю количество входных наблюдаемых или количество значений в массивах. В трассировке стека я вижу, что существует около 180 вызовов, связанных с наблюдаемой выше. Как я могу выполнить вызов finalize вне стека вызовов observables?

1 Ответ

0 голосов
/ 14 октября 2019

Если вы хотите вызвать свою функцию внутри метода подписки, вы можете попробовать

...subscribe({
  next: (data) => {/*data retrieval*/},
  error: (err) => {/*error callback*/},
  complete: ()=> {someSideAction()}})

, который будет выполнен после завершения next обратного вызова.

см. эту статью

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...