UnsubscriptionError:RangeError:超出最大调用堆栈大小

时间:2019-10-13 21:26:58

标签: angular rxjs

在我的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();

代码工作正常。但是,由于调用堆栈大小过多,我的finalize调用崩溃了(副作用不是特别轻巧)。当我增加输入可观察值的数量或数组中值的数量时,就会发生这种情况。 在堆栈跟踪中,我看到大约有180次与上述可观察到的调用有关。如何在Observables调用堆栈之外运行finalize调用?

1 个答案:

答案 0 :(得分:0)

如果要在subscribe方法中调用函数,可以尝试

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

这将在next回调完成后执行。

请参阅this article