使用RxJS处理流端的惯用方法

时间:2015-07-29 16:28:40

标签: system.reactive reactive-programming rxjs

我需要在流结束时执行一些操作。什么是惯用的方式呢?

现在我使用下面的代码:

{{1}}

1 个答案:

答案 0 :(得分:3)

有几种方法可以实现这一目标:

  1. 使用运算符subscribeOnCompleted()而不是将空值传递给.subscribe方法。

  2. 使用tapOnCompleted(),与上面相同,但它不会启动序列,您可以在序列的一部分注入它。

  3. 使用.finally(),它将在序列完成时执行(正常或其他方式)。

  4. 在您的示例中,您显示了副作用,但如果您正在清理资源,那么使用.using()会更加语义化,这需要一次性使用并将其与订阅的生命周期联系起来。

  5. 为了这些看起来像:

    1. source.subscribeOnCompleted(() => socket.send({type: 'end'}));

    2. source.tapOnCompleted(() => socket.send({type: 'end'})).subscribe()

    3. source.finally(() => socket.send({type: 'end'})).subscribe()

    4. Rx.Observable.using(() => createResource(), (resource) => source).subscribe()