RxJS 在出错后保持 Subject/Observable 订阅有效
RxJS Keep Subject/Observable Subscription Active After Error
有没有办法在 observable/subject 上调用错误函数后阻止对流(可观察或主题)的订阅完成?
var subject = new Rx.Subject();
subject.subscribe(function(){alert("OnNext")}, function(){alert("OnError")});
var next = document.querySelector("#next").addEventListener('click', function(){
subject.next();
})
var error = document.querySelector("#error").addEventListener('click', function(){
subject.error();
});
据我了解,调用 subject.error()
完成了事件流。所以保持 observable 打开会破坏 Observable 对象的契约。那么我怎样才能以这种在发生错误后重新创建订阅的方式处理可观察对象的生命周期呢?这是一个 plnkr 演示行为。
简单地说,你不能。至少没有主题。
对象有内部状态,当它们发出或接收到 error
通知时,它们 mark themself as stopped 永远不会发出任何东西。
否则,您可以使用 catch()
或 retry()
重新订阅其源 Observable 的运算符,但这在使用 Subjects 时对您没有帮助。
有没有办法在 observable/subject 上调用错误函数后阻止对流(可观察或主题)的订阅完成?
var subject = new Rx.Subject();
subject.subscribe(function(){alert("OnNext")}, function(){alert("OnError")});
var next = document.querySelector("#next").addEventListener('click', function(){
subject.next();
})
var error = document.querySelector("#error").addEventListener('click', function(){
subject.error();
});
据我了解,调用 subject.error()
完成了事件流。所以保持 observable 打开会破坏 Observable 对象的契约。那么我怎样才能以这种在发生错误后重新创建订阅的方式处理可观察对象的生命周期呢?这是一个 plnkr 演示行为。
简单地说,你不能。至少没有主题。
对象有内部状态,当它们发出或接收到 error
通知时,它们 mark themself as stopped 永远不会发出任何东西。
否则,您可以使用 catch()
或 retry()
重新订阅其源 Observable 的运算符,但这在使用 Subjects 时对您没有帮助。