|
| 1 | + var MapObservable = (function (__super__) { |
| 2 | + inherits(MapObservable, __super__); |
| 3 | + |
| 4 | + function MapObservable(source, selector, thisArg) { |
| 5 | + this.source = source; |
| 6 | + this.selector = bindCallback(selector, thisArg, 3); |
| 7 | + __super__.call(this); |
| 8 | + } |
| 9 | + |
| 10 | + MapObservable.prototype.internalMap = function (selector, thisArg) { |
| 11 | + var self = this; |
| 12 | + return new MapObservable(this.source, function (x, i, o) { return selector.call(this, self.selector(x, i, o), i, o); }, thisArg) |
| 13 | + }; |
| 14 | + |
| 15 | + MapObservable.prototype.subscribeCore = function (observer) { |
| 16 | + return this.source.subscribe(onNext(observer, this.selector, this), onError(observer), onCompleted(observer)); |
| 17 | + }; |
| 18 | + |
| 19 | + function onNext(observer, selector, source) { |
| 20 | + var i = 0; |
| 21 | + return function (x) { |
| 22 | + var result = tryCatch(selector)(x, i++, source); |
| 23 | + if (result === errorObj) { |
| 24 | + observer.onError(result.e); |
| 25 | + } else { |
| 26 | + observer.onNext(result); |
| 27 | + } |
| 28 | + } |
| 29 | + }; |
| 30 | + |
| 31 | + function onError(observer) { |
| 32 | + return function (err) { observer.onError(err); }; |
| 33 | + } |
| 34 | + |
| 35 | + function onCompleted(observer) { |
| 36 | + return function () { observer.onCompleted(); }; |
| 37 | + } |
| 38 | + |
| 39 | + return MapObservable; |
| 40 | + |
| 41 | + }(ObservableBase)); |
| 42 | + |
| 43 | + /** |
| 44 | + * Projects each element of an observable sequence into a new form by incorporating the element's index. |
| 45 | + * @param {Function} selector A transform function to apply to each source element; the second parameter of the function represents the index of the source element. |
| 46 | + * @param {Any} [thisArg] Object to use as this when executing callback. |
| 47 | + * @returns {Observable} An observable sequence whose elements are the result of invoking the transform function on each element of source. |
| 48 | + */ |
| 49 | + observableProto.map = observableProto.select = function (selector, thisArg) { |
| 50 | + var selectorFn = typeof selector === 'function' ? selector : function () { return selector; }; |
| 51 | + return this instanceof MapObservable ? |
| 52 | + this.internalMap(selectorFn, thisArg) : |
| 53 | + new MapObservable(this, selectorFn, thisArg); |
| 54 | + }; |
0 commit comments