我有一个RxJS可观察流,我分享如下:
SELECT I.INGREDIENT, COUNT(I.ID)
FROM INGREDIENTS I
JOIN RECIPE R ON I.ID = R.ID
GROUP BY I.INGREDIENT
当最后一个订阅者取消订阅时,我需要发出REST请求。显而易见的选择是将该调用添加到var sub = Observable.create(obs => {
// logic here
return () => {
// call rest service to notify server
};
})
.publish()
.refCount();
清理函数中 - 但是您已经打破了任何可观察的序列,并且任何错误等都不容易处理。
我可以使用return
,在清理函数中将值推送到清除函数中,并在REST调用挂起的情况下在其他位置观察它。
理想情况下,我会使用我的REST呼叫(例如Subject
显然无法正常工作)来连接已处理的流。
有没有人对最干净的处理方式有任何建议?上面的所有选项看起来都很笨拙,我觉得我错过了一些东西。
答案 0 :(得分:2)
您可以在流中实现finally(...)
,进行清理。
流最终确定(错误或完成)时会自动执行finally
。
注意:当您手动取消订阅并且不在您的信息流中呼叫complete
时,不将会有效。