我需要在流结束时执行一些操作。什么是惯用的方式呢?
现在我使用下面的代码:
{{1}}
答案 0 :(得分:3)
有几种方法可以实现这一目标:
使用运算符subscribeOnCompleted()
而不是将空值传递给.subscribe
方法。
使用tapOnCompleted()
,与上面相同,但它不会启动序列,您可以在序列的一部分注入它。
使用.finally()
,它将在序列完成时执行(正常或其他方式)。
在您的示例中,您显示了副作用,但如果您正在清理资源,那么使用.using()
会更加语义化,这需要一次性使用并将其与订阅的生命周期联系起来。
为了这些看起来像:
source.subscribeOnCompleted(() => socket.send({type: 'end'}));
source.tapOnCompleted(() => socket.send({type: 'end'})).subscribe()
source.finally(() => socket.send({type: 'end'})).subscribe()
Rx.Observable.using(() => createResource(), (resource) => source).subscribe()