将Rxjs与节点I / O操作一起使用

时间:2017-05-22 14:30:12

标签: node.js typescript rxjs5

我正在尝试将Rxjs与一个可以执行一些I / O操作的小型Node程序一起使用。 Void操作(例如writeFile)已作为Observables完成,没有任何发射值。它可以在大理石图中表示为:

writeFile (success) ---------|
writeFile (error)   ---------X

我正在尝试执行以下操作:

removeDir    -------|
writeFiles          -------|
transformFiles             -------|

要以正确的顺序完成这些操作,我的代码看起来像这样:

// helpers.ts
import { Observable } from '@reactivex/rxjs';
export function removeDir(dir: string): Observable<void> { ... }
export function writeFiles(fromDir: string, toDir: string): Observable<void> { ... }
export function transformFiles(dir: string): Observable<void> { ... }

// main.ts
import { Observable } from '@reactivex/rxjs';
import { removeDir, writeFiles, transformFiles } from './helpers';

const filesReady = removeDir('output')
  .concat(Observable.defer(() => writeFiles('input', 'output')))
  .concat(Observable.defer(() => transformFiles('output')));

filesReady.subscribe({
  error(err) {
    // Something went wrong!
  }
  complete() {
    // Do something when files are ready
  }
})

这个例子有点简化,但是我想在一起编写Observable的地方遇到问题。许多Rxjs运算符仅适用于完整事件。

是否有更好的方法可以使用I / O事件撰写Rxjs? 我发现围绕Rxjs的一些概念令人困惑,所以非常感谢任何帮助。

0 个答案:

没有答案