美文网首页
Map 操作符

Map 操作符

作者: JamesSawyer | 来源:发表于2017-12-10 13:12 被阅读4次

map 操作符实质是以下形式的封装

// transformFn 是一个函数,对数据进行转换操作
function myMap(transformFn) {
  var source = this; // 使之变为链式调用的形式

  // result 是一个 observable
  var result = Rx.Observable.create(function subscribe(observer) {
    source.subscribe(
      function(x) { observer.next(transformFn(x)); },
      function(error) { observer.error(error); },
      function() { observer.complete(); }
    );
  });
  return result;
}

Rx.Observable.create 接受一个 参数为 observer 的subscribe函数,然后source订阅

上面的 var source = this是为了避免下面的写法,另外还可以实现链式调用

function myMap(source, transformFn) {  // ... }

使用 Monkey Patch 的方式将这个方法添加到Rx.Observable 的原型链上

Rx.Observable.prototype.myMap = myMap;

示例:

var source = Rx.Observable.interval(1000);
// 返回一个observable
var result = source.myMap(x => x * 2)

// 订阅
result.subscribe(console.log);

// 打印结果
0
2
4
// ...

相关文章

网友评论

      本文标题:Map 操作符

      本文链接:https://www.haomeiwen.com/subject/zrnmixtx.html