观察流取消订阅的时间

时间:2017-02-09 10:56:33

标签: rxjs rxjs5

我有一个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显然无法正常工作)来连接已处理的流。

有没有人对最干净的处理方式有任何建议?上面的所有选项看起来都很笨拙,我觉得我错过了一些东西。

1 个答案:

答案 0 :(得分:2)

您可以在流中实现finally(...),进行清理。 流最终确定(错误或完成)时会自动执行finally

注意:当您手动取消订阅并且不在您的信息流中呼叫complete时,将会有效。