123456789101112131415161718192021222324252627282930313233343536373839 |
- "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
- });
- };
|