我有一个简单的Javascript函数,它返回一个observable,我已将shareReplay
运算符应用于参数1。
[![export function doStuffWithShareReplay() {
return interval(100).pipe(
shareReplay(1),
tap(d => console.log('do stuff 1', d)),
take(5)
);
}
如果我将这个函数放在 mocha 测试中并从VSCode中运行它,那么测试的执行似乎永远不会完成,我必须手动停止测试执行。更确切地说,测试按预期通过,但VScode顶部中心的小控制板未关闭,我必须单击红色按钮将其关闭,如下图所示。如果我删除shareReplay
,则执行按预期结束。我想知道这是什么行为的原因。
答案 0 :(得分:2)
使用publishReplay(1)
和refCount()
代替shareReplay(1)
:
return interval(100).pipe(
publishReplay(1),
refCount(),
...
自从RxJS 5.5(仍然存在于RxJS 6.1中)以来shareReplay(1)
中存在一个错误,它阻止它从订阅源中取消订阅。
有关详细信息,请参阅此问题:https://github.com/ReactiveX/rxjs/issues/3336