试图处理Rxjs,你会怎么做这样的事情

时间:2016-03-23 19:36:10

标签: rxjs

我有点痴迷于rxjs,但是试图将它实现到一个真实的项目中,我无法弄清楚从哪里开始。所以这就是我想要做的。

  1. 使用fs读取目录,并获取其中的所有文件

  2. 运行一些函数,一次解析一个文件并为mysql构建一个insert语句

  3. 使用该语句运行它,当它成功时,再次使用另一个文件(或者最好同时运行其中的10个)

  4. 我的思维过程是,从files数组中创建一个可观察的流,然后让订阅执行插入。但是你如何逐一进行并等到上一次插入成功。除此之外,你如何同时做其中的10个?任何人都可以指引我正确的方式吗?

1 个答案:

答案 0 :(得分:1)

rxjs是管理异步代码的绝佳工具。除非你肯定需要并发或异步处理,否则我会简单地使用程序或函数编程,并将rxjs排除在等式之外。

话虽如此,有些用例,甚至可能是你的用例,确实需要某种异步处理来读取文件,处理它们然后对它们起作用,这个过程的某些或所有部分都是异步的。

您可以使用 .next()编写文件名的可观察流,或使用 Observable.of(arrayOfFileNames)然后 .map()< / strong>将文件名放入其内容,然后将 .map()内容放入生成的SQL查询中,并将 .subscribe()添加到此SQL查询流中以运行每个SQL查询。

链中某个点的rxjs中的错误处理会触发 .subscribe()调用的错误部分(第二个参数),或者可能被捕获为 .error()< / strong>在链中。但请注意,除非您将链路的某些部分隔离以查找潜在错误,否则任何错误都将丢弃错误上游的所有部分,并仅将错误转发给订户。然后整个链在第一个错误时死亡而没有明确的隔离。

请注意,尽管我已经明确表示rxjs是一个仅用于管理异步代码的好工具,但默认情况下,rxjs使用同步调度程序,链和订阅将以“阻塞”方式发生。您可以通过将其添加为 Observable.of()的最后一个参数来选择不同的计划程序。