Functional Reactive Programming 中如何把一个数组拆成多个事件触发?

发布于 2022-09-02 13:29:41 字数 768 浏览 26 评论 0

怎样用一个数组的返回值来创建更多的触发事件呢?

举个处理文件的例子:

var glob = require('glob');
var Rx = require('rx');
var fs = require('fs');

// 给个初始的表达式
var source = Rx.Observable.just('*.md');

// 列出符合这个表达式的文件
var file = source.map(function(pattern) {
  return Rx.Observable.fromNodeCallback(glob)(pattern);
});

// 对单个文件进行读取操作。实际这里 map 后传入的参数是个数组,但我期望是对数组迭代的单个值
var reader = file.map(function(filename) {
  return Rx.Observable.fromNodeCallback(fs.readFile)(filename);
});

// 最终在这里迭代拿到每个文件的内容
reader.subscribe(function(content) {
  console.log(content);
});

时序大概像下图:

  listStream: ---A--------->
 splitStream: ---aaaaa----->
readerStream: ----bbbbb---->

刚刚接触 Reactive Programming,期望各种场景就都用这个思路试试。

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

岁月打碎记忆 2022-09-09 13:29:41

如果是rx的话直接from就好了,但是glob函数本身就一次callback,会一堆挤在stream一个地方。意义不太大。所以。唯一reactive的地方是reader
另外source没必要包成monad,铁定有的东西

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文