@reactivex/rxjs
Version:
Reactive Extensions for modern JavaScript
72 lines • 2.11 kB
JavaScript
;
var root_1 = require('../util/root');
/* tslint:disable:max-line-length */
/**
* Converts an Observable sequence to a ES2015 compliant promise.
*
* @example
* // Using normal ES2015
* let source = Rx.Observable
* .just(42)
* .toPromise();
*
* source.then((value) => console.log('Value: %s', value));
* // => Value: 42
*
* // Rejected Promise
* // Using normal ES2015
* let source = Rx.Observable
* .throw(new Error('woops'))
* .toPromise();
*
* source
* .then((value) => console.log('Value: %s', value))
* .catch((err) => console.log('Error: %s', err));
* // => Error: Error: woops
*
* // Setting via the config
* Rx.config.Promise = RSVP.Promise;
*
* let source = Rx.Observable
* .of(42)
* .toPromise();
*
* source.then((value) => console.log('Value: %s', value));
* // => Value: 42
*
* // Setting via the method
* let source = Rx.Observable
* .just(42)
* .toPromise(RSVP.Promise);
*
* source.then((value) => console.log('Value: %s', value));
* // => Value: 42
*
* @param PromiseCtor promise The constructor of the promise. If not provided,
* it will look for a constructor first in Rx.config.Promise then fall back to
* the native Promise constructor if available.
* @return {Promise<T>} An ES2015 compatible promise with the last value from
* the observable sequence.
* @method toPromise
* @owner Observable
*/
function toPromise(PromiseCtor) {
var _this = this;
if (!PromiseCtor) {
if (root_1.root.Rx && root_1.root.Rx.config && root_1.root.Rx.config.Promise) {
PromiseCtor = root_1.root.Rx.config.Promise;
}
else if (root_1.root.Promise) {
PromiseCtor = root_1.root.Promise;
}
}
if (!PromiseCtor) {
throw new Error('no Promise impl found');
}
return new PromiseCtor(function (resolve, reject) {
var value;
_this.subscribe(function (x) { return value = x; }, function (err) { return reject(err); }, function () { return resolve(value); });
});
}
exports.toPromise = toPromise;
//# sourceMappingURL=toPromise.js.map