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,期望各种场景就都用这个思路试试。
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(1)
如果是rx的话直接from就好了,但是glob函数本身就一次callback,会一堆挤在stream一个地方。意义不太大。所以。唯一reactive的地方是reader
另外source没必要包成monad,铁定有的东西