RxJS 可观察中的循环在调用完成或错误后不会停止



调用observer.complete()observer.error()时,观察者停止发送数据并认为完成。然而,如果观察者中有for循环,即使在observer.complete()被调用之后,循环仍将继续运行。有人能给我解释一下这种行为吗?我预计这个循环会被缩短。当前的行为意味着间隔或while循环将永远在Observable中运行,除非我在代码中取消订阅。

在下面的代码片段中,我添加了一个console.log,以查看日志是否会在observer.complete()之后被调用。

const testObservable = new Observable( observer => {
for (let count = 0; count < 11; count++){
observer.next(count);
if (count > 5) {
observer.complete()
console.log("test")
}
if (count > 7) {
observer.error(Error("This is an error"))
}
}}
);
let firstObservable = testObservable.subscribe(
next => {console.log(next)},
error => { alert(error.message)},
() => {console.log("complete")}
)

create函数有责任正确地销毁资源。在您的情况下,可以在observer.complete()之后简单地使用return语句。

但一般来说,如果需要,create函数应该返回TeardownLogic函数,该函数在可观察对象结束时被调用。

new Observable( observer => {
// observable logic, e.g. ajax request
return () => {
// teardown function, e.g. cancel ajax request
};
});

Observable一旦完成,就忽略next(...),complete()error(...)的调用。这意味着complete()error(...)函数在内部被调用或可观察对象在外部被取消订阅。

new Observable( observer => {
observer.next('a');
observer.complete();
// next calls will be ignored
observer.next('b');
});
const observable = new Observable( observer => {
setTimeout(
() => observer.next('a'), // this will be ignored due to unsubscribe
10
);
});
const subscription = observable.subscribe(...);
subscription.unsubscribe();

相关内容

  • 没有找到相关文章

最新更新