2017-02-09 57 views
2

我有我分享如下所示的RxJS观察到的流观察:当流退订

var sub = Observable.create(obs => { 
    // logic here 

    return() => { 
     // call rest service to notify server 
    }; 
}) 
.publish() 
.refCount(); 

当最后一个用户取消订阅,我需要做一个REST请求。明显的选择是将该调用添加到return清理函数中 - 但是随后您已经打破了任何可观察的序列,并且任何错误等都不易处理。

我只能使用Subject,在清理函数中将一个值推送到它上面,并在其他地方用REST调用挂住它。

理想情况下我会做这样的事情串联到处置流与我的REST调用(concat明显,因为它是没有完成将无法正常工作)。

有没有人有最清洁的方式处理这个问题的任何建议?上述所有选项似乎有点笨重,我觉得我错过了一些东西。

回答

2

你可以在你的流中实现一个finally(...),进行清理。 流确定后(错误或完成),finally自动执行。

注意:当您手动取消,并在您的流不叫complete这将工作。

+0

我的用例仅适用于所有用户手动取消订阅 - 我不会完成它,如果出现错误,我不需要REST调用。无论哪种方式,最后使用我以上的东西并没有太大的不同。它打破了流模式,在那里打电话,失去了错误处理等。 – Marcus

+0

这意味着你将不断发布流中的数据,而有订阅者 - 正确吗? – olsn