You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
113 lines
4.4 KiB
113 lines
4.4 KiB
"use strict"; |
|
var __extends = (this && this.__extends) || function (d, b) { |
|
for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; |
|
function __() { this.constructor = d; } |
|
d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __()); |
|
}; |
|
var Subscriber_1 = require('../Subscriber'); |
|
/* tslint:enable:max-line-length */ |
|
/** |
|
* Perform a side effect for every emission on the source Observable, but return |
|
* an Observable that is identical to the source. |
|
* |
|
* <span class="informal">Intercepts each emission on the source and runs a |
|
* function, but returns an output which is identical to the source as long as errors don't occur.</span> |
|
* |
|
* <img src="./img/do.png" width="100%"> |
|
* |
|
* Returns a mirrored Observable of the source Observable, but modified so that |
|
* the provided Observer is called to perform a side effect for every value, |
|
* error, and completion emitted by the source. Any errors that are thrown in |
|
* the aforementioned Observer or handlers are safely sent down the error path |
|
* of the output Observable. |
|
* |
|
* This operator is useful for debugging your Observables for the correct values |
|
* or performing other side effects. |
|
* |
|
* Note: this is different to a `subscribe` on the Observable. If the Observable |
|
* returned by `do` is not subscribed, the side effects specified by the |
|
* Observer will never happen. `do` therefore simply spies on existing |
|
* execution, it does not trigger an execution to happen like `subscribe` does. |
|
* |
|
* @example <caption>Map every click to the clientX position of that click, while also logging the click event</caption> |
|
* var clicks = Rx.Observable.fromEvent(document, 'click'); |
|
* var positions = clicks |
|
* .do(ev => console.log(ev)) |
|
* .map(ev => ev.clientX); |
|
* positions.subscribe(x => console.log(x)); |
|
* |
|
* @see {@link map} |
|
* @see {@link subscribe} |
|
* |
|
* @param {Observer|function} [nextOrObserver] A normal Observer object or a |
|
* callback for `next`. |
|
* @param {function} [error] Callback for errors in the source. |
|
* @param {function} [complete] Callback for the completion of the source. |
|
* @return {Observable} An Observable identical to the source, but runs the |
|
* specified Observer or callback(s) for each item. |
|
* @name tap |
|
*/ |
|
function tap(nextOrObserver, error, complete) { |
|
return function tapOperatorFunction(source) { |
|
return source.lift(new DoOperator(nextOrObserver, error, complete)); |
|
}; |
|
} |
|
exports.tap = tap; |
|
var DoOperator = (function () { |
|
function DoOperator(nextOrObserver, error, complete) { |
|
this.nextOrObserver = nextOrObserver; |
|
this.error = error; |
|
this.complete = complete; |
|
} |
|
DoOperator.prototype.call = function (subscriber, source) { |
|
return source.subscribe(new DoSubscriber(subscriber, this.nextOrObserver, this.error, this.complete)); |
|
}; |
|
return DoOperator; |
|
}()); |
|
/** |
|
* We need this JSDoc comment for affecting ESDoc. |
|
* @ignore |
|
* @extends {Ignored} |
|
*/ |
|
var DoSubscriber = (function (_super) { |
|
__extends(DoSubscriber, _super); |
|
function DoSubscriber(destination, nextOrObserver, error, complete) { |
|
_super.call(this, destination); |
|
var safeSubscriber = new Subscriber_1.Subscriber(nextOrObserver, error, complete); |
|
safeSubscriber.syncErrorThrowable = true; |
|
this.add(safeSubscriber); |
|
this.safeSubscriber = safeSubscriber; |
|
} |
|
DoSubscriber.prototype._next = function (value) { |
|
var safeSubscriber = this.safeSubscriber; |
|
safeSubscriber.next(value); |
|
if (safeSubscriber.syncErrorThrown) { |
|
this.destination.error(safeSubscriber.syncErrorValue); |
|
} |
|
else { |
|
this.destination.next(value); |
|
} |
|
}; |
|
DoSubscriber.prototype._error = function (err) { |
|
var safeSubscriber = this.safeSubscriber; |
|
safeSubscriber.error(err); |
|
if (safeSubscriber.syncErrorThrown) { |
|
this.destination.error(safeSubscriber.syncErrorValue); |
|
} |
|
else { |
|
this.destination.error(err); |
|
} |
|
}; |
|
DoSubscriber.prototype._complete = function () { |
|
var safeSubscriber = this.safeSubscriber; |
|
safeSubscriber.complete(); |
|
if (safeSubscriber.syncErrorThrown) { |
|
this.destination.error(safeSubscriber.syncErrorValue); |
|
} |
|
else { |
|
this.destination.complete(); |
|
} |
|
}; |
|
return DoSubscriber; |
|
}(Subscriber_1.Subscriber)); |
|
//# sourceMappingURL=tap.js.map
|