1234567891011121314151617181920212223242526272829303132333435363738 |
- "use strict";
- var isFunction = require("../function/is-function");
- module.exports = function (executor) {
- var Constructor;
- if (isFunction(this)) {
- Constructor = this;
- } else if (typeof Promise === "function") {
- Constructor = Promise;
- } else {
- throw new TypeError("Could not resolve Promise constuctor");
- }
- var lazyThen;
- var promise = new Constructor(function (resolve, reject) {
- lazyThen = function (onSuccess, onFailure) {
- if (!hasOwnProperty.call(this, "then")) {
- // Sanity check
- throw new Error("Unexpected (inherited) lazy then invocation");
- }
- try {
- executor(resolve, reject);
- } catch (reason) {
- reject(reason);
- }
- delete this.then;
- return this.then(onSuccess, onFailure);
- };
- });
- return Object.defineProperty(promise, "then", {
- configurable: true,
- writable: true,
- value: lazyThen
- });
- };
|