我需要在流结束时做一些操作。习惯的做法是什么?
现在我使用下面的代码:source.subscribe(undefined, undefined, function() {
socket.send({type: 'end'});
});
有几种方法可以做到这一点:
-
使用操作符
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()