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

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

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

举个处理文件的例子:

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,期望各种场景就都用这个思路试试。


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

【热门文章】
【热门文章】