| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851852853854855856857858859860861862863864865866867868869870871872873874875876877878879880881882883884885886887888889890891892893894895896897898899900901902903904905906907908909910911912913914915916917918919920921922923924925926927928929930931932933934935936937938939940941942943944945946947948949950951952953954955956 | /*! * @overview es6-promise - a tiny implementation of Promises/A+. * @copyright Copyright (c) 2014 Yehuda Katz, Tom Dale, Stefan Penner and contributors (Conversion to ES6 API by Jake Archibald) * @license   Licensed under MIT license *            See https://raw.githubusercontent.com/stefanpenner/es6-promise/master/LICENSE * @version   3.2.2+39aa2571 */(function() {    "use strict";    function lib$es6$promise$utils$$objectOrFunction(x) {      return typeof x === 'function' || (typeof x === 'object' && x !== null);    }    function lib$es6$promise$utils$$isFunction(x) {      return typeof x === 'function';    }    function lib$es6$promise$utils$$isMaybeThenable(x) {      return typeof x === 'object' && x !== null;    }    var lib$es6$promise$utils$$_isArray;    if (!Array.isArray) {      lib$es6$promise$utils$$_isArray = function (x) {        return Object.prototype.toString.call(x) === '[object Array]';      };    } else {      lib$es6$promise$utils$$_isArray = Array.isArray;    }    var lib$es6$promise$utils$$isArray = lib$es6$promise$utils$$_isArray;    var lib$es6$promise$asap$$len = 0;    var lib$es6$promise$asap$$vertxNext;    var lib$es6$promise$asap$$customSchedulerFn;    var lib$es6$promise$asap$$asap = function asap(callback, arg) {      lib$es6$promise$asap$$queue[lib$es6$promise$asap$$len] = callback;      lib$es6$promise$asap$$queue[lib$es6$promise$asap$$len + 1] = arg;      lib$es6$promise$asap$$len += 2;      if (lib$es6$promise$asap$$len === 2) {        // If len is 2, that means that we need to schedule an async flush.        // If additional callbacks are queued before the queue is flushed, they        // will be processed by this flush that we are scheduling.        if (lib$es6$promise$asap$$customSchedulerFn) {          lib$es6$promise$asap$$customSchedulerFn(lib$es6$promise$asap$$flush);        } else {          lib$es6$promise$asap$$scheduleFlush();        }      }    }    function lib$es6$promise$asap$$setScheduler(scheduleFn) {      lib$es6$promise$asap$$customSchedulerFn = scheduleFn;    }    function lib$es6$promise$asap$$setAsap(asapFn) {      lib$es6$promise$asap$$asap = asapFn;    }    var lib$es6$promise$asap$$browserWindow = (typeof window !== 'undefined') ? window : undefined;    var lib$es6$promise$asap$$browserGlobal = lib$es6$promise$asap$$browserWindow || {};    var lib$es6$promise$asap$$BrowserMutationObserver = lib$es6$promise$asap$$browserGlobal.MutationObserver || lib$es6$promise$asap$$browserGlobal.WebKitMutationObserver;    var lib$es6$promise$asap$$isNode = typeof self === 'undefined' && typeof process !== 'undefined' && {}.toString.call(process) === '[object process]';    // test for web worker but not in IE10    var lib$es6$promise$asap$$isWorker = typeof Uint8ClampedArray !== 'undefined' &&      typeof importScripts !== 'undefined' &&      typeof MessageChannel !== 'undefined';    // node    function lib$es6$promise$asap$$useNextTick() {      // node version 0.10.x displays a deprecation warning when nextTick is used recursively      // see https://github.com/cujojs/when/issues/410 for details      return function() {        process.nextTick(lib$es6$promise$asap$$flush);      };    }    // vertx    function lib$es6$promise$asap$$useVertxTimer() {      return function() {        lib$es6$promise$asap$$vertxNext(lib$es6$promise$asap$$flush);      };    }    function lib$es6$promise$asap$$useMutationObserver() {      var iterations = 0;      var observer = new lib$es6$promise$asap$$BrowserMutationObserver(lib$es6$promise$asap$$flush);      var node = document.createTextNode('');      observer.observe(node, { characterData: true });      return function() {        node.data = (iterations = ++iterations % 2);      };    }    // web worker    function lib$es6$promise$asap$$useMessageChannel() {      var channel = new MessageChannel();      channel.port1.onmessage = lib$es6$promise$asap$$flush;      return function () {        channel.port2.postMessage(0);      };    }    function lib$es6$promise$asap$$useSetTimeout() {      return function() {        setTimeout(lib$es6$promise$asap$$flush, 1);      };    }    var lib$es6$promise$asap$$queue = new Array(1000);    function lib$es6$promise$asap$$flush() {      for (var i = 0; i < lib$es6$promise$asap$$len; i+=2) {        var callback = lib$es6$promise$asap$$queue[i];        var arg = lib$es6$promise$asap$$queue[i+1];        callback(arg);        lib$es6$promise$asap$$queue[i] = undefined;        lib$es6$promise$asap$$queue[i+1] = undefined;      }      lib$es6$promise$asap$$len = 0;    }    function lib$es6$promise$asap$$attemptVertx() {      try {        var r = require;        var vertx = r('vertx');        lib$es6$promise$asap$$vertxNext = vertx.runOnLoop || vertx.runOnContext;        return lib$es6$promise$asap$$useVertxTimer();      } catch(e) {        return lib$es6$promise$asap$$useSetTimeout();      }    }    var lib$es6$promise$asap$$scheduleFlush;    // Decide what async method to use to triggering processing of queued callbacks:    if (lib$es6$promise$asap$$isNode) {      lib$es6$promise$asap$$scheduleFlush = lib$es6$promise$asap$$useNextTick();    } else if (lib$es6$promise$asap$$BrowserMutationObserver) {      lib$es6$promise$asap$$scheduleFlush = lib$es6$promise$asap$$useMutationObserver();    } else if (lib$es6$promise$asap$$isWorker) {      lib$es6$promise$asap$$scheduleFlush = lib$es6$promise$asap$$useMessageChannel();    } else if (lib$es6$promise$asap$$browserWindow === undefined && typeof require === 'function') {      lib$es6$promise$asap$$scheduleFlush = lib$es6$promise$asap$$attemptVertx();    } else {      lib$es6$promise$asap$$scheduleFlush = lib$es6$promise$asap$$useSetTimeout();    }    function lib$es6$promise$then$$then(onFulfillment, onRejection) {      var parent = this;      var child = new this.constructor(lib$es6$promise$$internal$$noop);      if (child[lib$es6$promise$$internal$$PROMISE_ID] === undefined) {        lib$es6$promise$$internal$$makePromise(child);      }      var state = parent._state;      if (state) {        var callback = arguments[state - 1];        lib$es6$promise$asap$$asap(function(){          lib$es6$promise$$internal$$invokeCallback(state, child, callback, parent._result);        });      } else {        lib$es6$promise$$internal$$subscribe(parent, child, onFulfillment, onRejection);      }      return child;    }    var lib$es6$promise$then$$default = lib$es6$promise$then$$then;    function lib$es6$promise$promise$resolve$$resolve(object) {      /*jshint validthis:true */      var Constructor = this;      if (object && typeof object === 'object' && object.constructor === Constructor) {        return object;      }      var promise = new Constructor(lib$es6$promise$$internal$$noop);      lib$es6$promise$$internal$$resolve(promise, object);      return promise;    }    var lib$es6$promise$promise$resolve$$default = lib$es6$promise$promise$resolve$$resolve;    var lib$es6$promise$$internal$$PROMISE_ID = Math.random().toString(36).substring(16);    function lib$es6$promise$$internal$$noop() {}    var lib$es6$promise$$internal$$PENDING   = void 0;    var lib$es6$promise$$internal$$FULFILLED = 1;    var lib$es6$promise$$internal$$REJECTED  = 2;    var lib$es6$promise$$internal$$GET_THEN_ERROR = new lib$es6$promise$$internal$$ErrorObject();    function lib$es6$promise$$internal$$selfFulfillment() {      return new TypeError("You cannot resolve a promise with itself");    }    function lib$es6$promise$$internal$$cannotReturnOwn() {      return new TypeError('A promises callback cannot return that same promise.');    }    function lib$es6$promise$$internal$$getThen(promise) {      try {        return promise.then;      } catch(error) {        lib$es6$promise$$internal$$GET_THEN_ERROR.error = error;        return lib$es6$promise$$internal$$GET_THEN_ERROR;      }    }    function lib$es6$promise$$internal$$tryThen(then, value, fulfillmentHandler, rejectionHandler) {      try {        then.call(value, fulfillmentHandler, rejectionHandler);      } catch(e) {        return e;      }    }    function lib$es6$promise$$internal$$handleForeignThenable(promise, thenable, then) {       lib$es6$promise$asap$$asap(function(promise) {        var sealed = false;        var error = lib$es6$promise$$internal$$tryThen(then, thenable, function(value) {          if (sealed) { return; }          sealed = true;          if (thenable !== value) {            lib$es6$promise$$internal$$resolve(promise, value);          } else {            lib$es6$promise$$internal$$fulfill(promise, value);          }        }, function(reason) {          if (sealed) { return; }          sealed = true;          lib$es6$promise$$internal$$reject(promise, reason);        }, 'Settle: ' + (promise._label || ' unknown promise'));        if (!sealed && error) {          sealed = true;          lib$es6$promise$$internal$$reject(promise, error);        }      }, promise);    }    function lib$es6$promise$$internal$$handleOwnThenable(promise, thenable) {      if (thenable._state === lib$es6$promise$$internal$$FULFILLED) {        lib$es6$promise$$internal$$fulfill(promise, thenable._result);      } else if (thenable._state === lib$es6$promise$$internal$$REJECTED) {        lib$es6$promise$$internal$$reject(promise, thenable._result);      } else {        lib$es6$promise$$internal$$subscribe(thenable, undefined, function(value) {          lib$es6$promise$$internal$$resolve(promise, value);        }, function(reason) {          lib$es6$promise$$internal$$reject(promise, reason);        });      }    }    function lib$es6$promise$$internal$$handleMaybeThenable(promise, maybeThenable, then) {      if (maybeThenable.constructor === promise.constructor &&          then === lib$es6$promise$then$$default &&          constructor.resolve === lib$es6$promise$promise$resolve$$default) {        lib$es6$promise$$internal$$handleOwnThenable(promise, maybeThenable);      } else {        if (then === lib$es6$promise$$internal$$GET_THEN_ERROR) {          lib$es6$promise$$internal$$reject(promise, lib$es6$promise$$internal$$GET_THEN_ERROR.error);        } else if (then === undefined) {          lib$es6$promise$$internal$$fulfill(promise, maybeThenable);        } else if (lib$es6$promise$utils$$isFunction(then)) {          lib$es6$promise$$internal$$handleForeignThenable(promise, maybeThenable, then);        } else {          lib$es6$promise$$internal$$fulfill(promise, maybeThenable);        }      }    }    function lib$es6$promise$$internal$$resolve(promise, value) {      if (promise === value) {        lib$es6$promise$$internal$$reject(promise, lib$es6$promise$$internal$$selfFulfillment());      } else if (lib$es6$promise$utils$$objectOrFunction(value)) {        lib$es6$promise$$internal$$handleMaybeThenable(promise, value, lib$es6$promise$$internal$$getThen(value));      } else {        lib$es6$promise$$internal$$fulfill(promise, value);      }    }    function lib$es6$promise$$internal$$publishRejection(promise) {      if (promise._onerror) {        promise._onerror(promise._result);      }      lib$es6$promise$$internal$$publish(promise);    }    function lib$es6$promise$$internal$$fulfill(promise, value) {      if (promise._state !== lib$es6$promise$$internal$$PENDING) { return; }      promise._result = value;      promise._state = lib$es6$promise$$internal$$FULFILLED;      if (promise._subscribers.length !== 0) {        lib$es6$promise$asap$$asap(lib$es6$promise$$internal$$publish, promise);      }    }    function lib$es6$promise$$internal$$reject(promise, reason) {      if (promise._state !== lib$es6$promise$$internal$$PENDING) { return; }      promise._state = lib$es6$promise$$internal$$REJECTED;      promise._result = reason;      lib$es6$promise$asap$$asap(lib$es6$promise$$internal$$publishRejection, promise);    }    function lib$es6$promise$$internal$$subscribe(parent, child, onFulfillment, onRejection) {      var subscribers = parent._subscribers;      var length = subscribers.length;      parent._onerror = null;      subscribers[length] = child;      subscribers[length + lib$es6$promise$$internal$$FULFILLED] = onFulfillment;      subscribers[length + lib$es6$promise$$internal$$REJECTED]  = onRejection;      if (length === 0 && parent._state) {        lib$es6$promise$asap$$asap(lib$es6$promise$$internal$$publish, parent);      }    }    function lib$es6$promise$$internal$$publish(promise) {      var subscribers = promise._subscribers;      var settled = promise._state;      if (subscribers.length === 0) { return; }      var child, callback, detail = promise._result;      for (var i = 0; i < subscribers.length; i += 3) {        child = subscribers[i];        callback = subscribers[i + settled];        if (child) {          lib$es6$promise$$internal$$invokeCallback(settled, child, callback, detail);        } else {          callback(detail);        }      }      promise._subscribers.length = 0;    }    function lib$es6$promise$$internal$$ErrorObject() {      this.error = null;    }    var lib$es6$promise$$internal$$TRY_CATCH_ERROR = new lib$es6$promise$$internal$$ErrorObject();    function lib$es6$promise$$internal$$tryCatch(callback, detail) {      try {        return callback(detail);      } catch(e) {        lib$es6$promise$$internal$$TRY_CATCH_ERROR.error = e;        return lib$es6$promise$$internal$$TRY_CATCH_ERROR;      }    }    function lib$es6$promise$$internal$$invokeCallback(settled, promise, callback, detail) {      var hasCallback = lib$es6$promise$utils$$isFunction(callback),          value, error, succeeded, failed;      if (hasCallback) {        value = lib$es6$promise$$internal$$tryCatch(callback, detail);        if (value === lib$es6$promise$$internal$$TRY_CATCH_ERROR) {          failed = true;          error = value.error;          value = null;        } else {          succeeded = true;        }        if (promise === value) {          lib$es6$promise$$internal$$reject(promise, lib$es6$promise$$internal$$cannotReturnOwn());          return;        }      } else {        value = detail;        succeeded = true;      }      if (promise._state !== lib$es6$promise$$internal$$PENDING) {        // noop      } else if (hasCallback && succeeded) {        lib$es6$promise$$internal$$resolve(promise, value);      } else if (failed) {        lib$es6$promise$$internal$$reject(promise, error);      } else if (settled === lib$es6$promise$$internal$$FULFILLED) {        lib$es6$promise$$internal$$fulfill(promise, value);      } else if (settled === lib$es6$promise$$internal$$REJECTED) {        lib$es6$promise$$internal$$reject(promise, value);      }    }    function lib$es6$promise$$internal$$initializePromise(promise, resolver) {      try {        resolver(function resolvePromise(value){          lib$es6$promise$$internal$$resolve(promise, value);        }, function rejectPromise(reason) {          lib$es6$promise$$internal$$reject(promise, reason);        });      } catch(e) {        lib$es6$promise$$internal$$reject(promise, e);      }    }    var lib$es6$promise$$internal$$id = 0;    function lib$es6$promise$$internal$$nextId() {      return lib$es6$promise$$internal$$id++;    }    function lib$es6$promise$$internal$$makePromise(promise) {      promise[lib$es6$promise$$internal$$PROMISE_ID] = lib$es6$promise$$internal$$id++;      promise._state = undefined;      promise._result = undefined;      promise._subscribers = [];    }    function lib$es6$promise$promise$all$$all(entries) {      return new lib$es6$promise$enumerator$$default(this, entries).promise;    }    var lib$es6$promise$promise$all$$default = lib$es6$promise$promise$all$$all;    function lib$es6$promise$promise$race$$race(entries) {      /*jshint validthis:true */      var Constructor = this;      if (!lib$es6$promise$utils$$isArray(entries)) {        return new Constructor(function(resolve, reject) {          reject(new TypeError('You must pass an array to race.'));        });      } else {        return new Constructor(function(resolve, reject) {          var length = entries.length;          for (var i = 0; i < length; i++) {            Constructor.resolve(entries[i]).then(resolve, reject);          }        });      }    }    var lib$es6$promise$promise$race$$default = lib$es6$promise$promise$race$$race;    function lib$es6$promise$promise$reject$$reject(reason) {      /*jshint validthis:true */      var Constructor = this;      var promise = new Constructor(lib$es6$promise$$internal$$noop);      lib$es6$promise$$internal$$reject(promise, reason);      return promise;    }    var lib$es6$promise$promise$reject$$default = lib$es6$promise$promise$reject$$reject;    function lib$es6$promise$promise$$needsResolver() {      throw new TypeError('You must pass a resolver function as the first argument to the promise constructor');    }    function lib$es6$promise$promise$$needsNew() {      throw new TypeError("Failed to construct 'Promise': Please use the 'new' operator, this object constructor cannot be called as a function.");    }    var lib$es6$promise$promise$$default = lib$es6$promise$promise$$Promise;    /**      Promise objects represent the eventual result of an asynchronous operation. The      primary way of interacting with a promise is through its `then` method, which      registers callbacks to receive either a promise's eventual value or the reason      why the promise cannot be fulfilled.      Terminology      -----------      - `promise` is an object or function with a `then` method whose behavior conforms to this specification.      - `thenable` is an object or function that defines a `then` method.      - `value` is any legal JavaScript value (including undefined, a thenable, or a promise).      - `exception` is a value that is thrown using the throw statement.      - `reason` is a value that indicates why a promise was rejected.      - `settled` the final resting state of a promise, fulfilled or rejected.      A promise can be in one of three states: pending, fulfilled, or rejected.      Promises that are fulfilled have a fulfillment value and are in the fulfilled      state.  Promises that are rejected have a rejection reason and are in the      rejected state.  A fulfillment value is never a thenable.      Promises can also be said to *resolve* a value.  If this value is also a      promise, then the original promise's settled state will match the value's      settled state.  So a promise that *resolves* a promise that rejects will      itself reject, and a promise that *resolves* a promise that fulfills will      itself fulfill.      Basic Usage:      ------------      ```js      var promise = new Promise(function(resolve, reject) {        // on success        resolve(value);        // on failure        reject(reason);      });      promise.then(function(value) {        // on fulfillment      }, function(reason) {        // on rejection      });      ```      Advanced Usage:      ---------------      Promises shine when abstracting away asynchronous interactions such as      `XMLHttpRequest`s.      ```js      function getJSON(url) {        return new Promise(function(resolve, reject){          var xhr = new XMLHttpRequest();          xhr.open('GET', url);          xhr.onreadystatechange = handler;          xhr.responseType = 'json';          xhr.setRequestHeader('Accept', 'application/json');          xhr.send();          function handler() {            if (this.readyState === this.DONE) {              if (this.status === 200) {                resolve(this.response);              } else {                reject(new Error('getJSON: `' + url + '` failed with status: [' + this.status + ']'));              }            }          };        });      }      getJSON('/posts.json').then(function(json) {        // on fulfillment      }, function(reason) {        // on rejection      });      ```      Unlike callbacks, promises are great composable primitives.      ```js      Promise.all([        getJSON('/posts'),        getJSON('/comments')      ]).then(function(values){        values[0] // => postsJSON        values[1] // => commentsJSON        return values;      });      ```      @class Promise      @param {function} resolver      Useful for tooling.      @constructor    */    function lib$es6$promise$promise$$Promise(resolver) {      this[lib$es6$promise$$internal$$PROMISE_ID] = lib$es6$promise$$internal$$nextId();      this._result = this._state = undefined;      this._subscribers = [];      if (lib$es6$promise$$internal$$noop !== resolver) {        typeof resolver !== 'function' && lib$es6$promise$promise$$needsResolver();        this instanceof lib$es6$promise$promise$$Promise ? lib$es6$promise$$internal$$initializePromise(this, resolver) : lib$es6$promise$promise$$needsNew();      }    }    lib$es6$promise$promise$$Promise.all = lib$es6$promise$promise$all$$default;    lib$es6$promise$promise$$Promise.race = lib$es6$promise$promise$race$$default;    lib$es6$promise$promise$$Promise.resolve = lib$es6$promise$promise$resolve$$default;    lib$es6$promise$promise$$Promise.reject = lib$es6$promise$promise$reject$$default;    lib$es6$promise$promise$$Promise._setScheduler = lib$es6$promise$asap$$setScheduler;    lib$es6$promise$promise$$Promise._setAsap = lib$es6$promise$asap$$setAsap;    lib$es6$promise$promise$$Promise._asap = lib$es6$promise$asap$$asap;    lib$es6$promise$promise$$Promise.prototype = {      constructor: lib$es6$promise$promise$$Promise,    /**      The primary way of interacting with a promise is through its `then` method,      which registers callbacks to receive either a promise's eventual value or the      reason why the promise cannot be fulfilled.      ```js      findUser().then(function(user){        // user is available      }, function(reason){        // user is unavailable, and you are given the reason why      });      ```      Chaining      --------      The return value of `then` is itself a promise.  This second, 'downstream'      promise is resolved with the return value of the first promise's fulfillment      or rejection handler, or rejected if the handler throws an exception.      ```js      findUser().then(function (user) {        return user.name;      }, function (reason) {        return 'default name';      }).then(function (userName) {        // If `findUser` fulfilled, `userName` will be the user's name, otherwise it        // will be `'default name'`      });      findUser().then(function (user) {        throw new Error('Found user, but still unhappy');      }, function (reason) {        throw new Error('`findUser` rejected and we're unhappy');      }).then(function (value) {        // never reached      }, function (reason) {        // if `findUser` fulfilled, `reason` will be 'Found user, but still unhappy'.        // If `findUser` rejected, `reason` will be '`findUser` rejected and we're unhappy'.      });      ```      If the downstream promise does not specify a rejection handler, rejection reasons will be propagated further downstream.      ```js      findUser().then(function (user) {        throw new PedagogicalException('Upstream error');      }).then(function (value) {        // never reached      }).then(function (value) {        // never reached      }, function (reason) {        // The `PedgagocialException` is propagated all the way down to here      });      ```      Assimilation      ------------      Sometimes the value you want to propagate to a downstream promise can only be      retrieved asynchronously. This can be achieved by returning a promise in the      fulfillment or rejection handler. The downstream promise will then be pending      until the returned promise is settled. This is called *assimilation*.      ```js      findUser().then(function (user) {        return findCommentsByAuthor(user);      }).then(function (comments) {        // The user's comments are now available      });      ```      If the assimliated promise rejects, then the downstream promise will also reject.      ```js      findUser().then(function (user) {        return findCommentsByAuthor(user);      }).then(function (comments) {        // If `findCommentsByAuthor` fulfills, we'll have the value here      }, function (reason) {        // If `findCommentsByAuthor` rejects, we'll have the reason here      });      ```      Simple Example      --------------      Synchronous Example      ```javascript      var result;      try {        result = findResult();        // success      } catch(reason) {        // failure      }      ```      Errback Example      ```js      findResult(function(result, err){        if (err) {          // failure        } else {          // success        }      });      ```      Promise Example;      ```javascript      findResult().then(function(result){        // success      }, function(reason){        // failure      });      ```      Advanced Example      --------------      Synchronous Example      ```javascript      var author, books;      try {        author = findAuthor();        books  = findBooksByAuthor(author);        // success      } catch(reason) {        // failure      }      ```      Errback Example      ```js      function foundBooks(books) {      }      function failure(reason) {      }      findAuthor(function(author, err){        if (err) {          failure(err);          // failure        } else {          try {            findBoooksByAuthor(author, function(books, err) {              if (err) {                failure(err);              } else {                try {                  foundBooks(books);                } catch(reason) {                  failure(reason);                }              }            });          } catch(error) {            failure(err);          }          // success        }      });      ```      Promise Example;      ```javascript      findAuthor().        then(findBooksByAuthor).        then(function(books){          // found books      }).catch(function(reason){        // something went wrong      });      ```      @method then      @param {Function} onFulfilled      @param {Function} onRejected      Useful for tooling.      @return {Promise}    */      then: lib$es6$promise$then$$default,    /**      `catch` is simply sugar for `then(undefined, onRejection)` which makes it the same      as the catch block of a try/catch statement.      ```js      function findAuthor(){        throw new Error('couldn't find that author');      }      // synchronous      try {        findAuthor();      } catch(reason) {        // something went wrong      }      // async with promises      findAuthor().catch(function(reason){        // something went wrong      });      ```      @method catch      @param {Function} onRejection      Useful for tooling.      @return {Promise}    */      'catch': function(onRejection) {        return this.then(null, onRejection);      }    };    var lib$es6$promise$enumerator$$default = lib$es6$promise$enumerator$$Enumerator;    function lib$es6$promise$enumerator$$Enumerator(Constructor, input) {      this._instanceConstructor = Constructor;      this.promise = new Constructor(lib$es6$promise$$internal$$noop);      if (!this.promise[lib$es6$promise$$internal$$PROMISE_ID]) {        lib$es6$promise$$internal$$makePromise(this.promise);      }      if (lib$es6$promise$utils$$isArray(input)) {        this._input     = input;        this.length     = input.length;        this._remaining = input.length;        this._result = new Array(this.length);        if (this.length === 0) {          lib$es6$promise$$internal$$fulfill(this.promise, this._result);        } else {          this.length = this.length || 0;          this._enumerate();          if (this._remaining === 0) {            lib$es6$promise$$internal$$fulfill(this.promise, this._result);          }        }      } else {        lib$es6$promise$$internal$$reject(this.promise, lib$es6$promise$enumerator$$validationError());      }    }    function lib$es6$promise$enumerator$$validationError() {      return new Error('Array Methods must be provided an Array');    }    lib$es6$promise$enumerator$$Enumerator.prototype._enumerate = function() {      var length  = this.length;      var input   = this._input;      for (var i = 0; this._state === lib$es6$promise$$internal$$PENDING && i < length; i++) {        this._eachEntry(input[i], i);      }    };    lib$es6$promise$enumerator$$Enumerator.prototype._eachEntry = function(entry, i) {      var c = this._instanceConstructor;      var resolve = c.resolve;      if (resolve === lib$es6$promise$promise$resolve$$default) {        var then = lib$es6$promise$$internal$$getThen(entry);        if (then === lib$es6$promise$then$$default &&            entry._state !== lib$es6$promise$$internal$$PENDING) {          this._settledAt(entry._state, i, entry._result);        } else if (typeof then !== 'function') {          this._remaining--;          this._result[i] = entry;        } else if (c === lib$es6$promise$promise$$default) {          var promise = new c(lib$es6$promise$$internal$$noop);          lib$es6$promise$$internal$$handleMaybeThenable(promise, entry, then);          this._willSettleAt(promise, i);        } else {          this._willSettleAt(new c(function(resolve) { resolve(entry); }), i);        }      } else {        this._willSettleAt(resolve(entry), i);      }    };    lib$es6$promise$enumerator$$Enumerator.prototype._settledAt = function(state, i, value) {      var promise = this.promise;      if (promise._state === lib$es6$promise$$internal$$PENDING) {        this._remaining--;        if (state === lib$es6$promise$$internal$$REJECTED) {          lib$es6$promise$$internal$$reject(promise, value);        } else {          this._result[i] = value;        }      }      if (this._remaining === 0) {        lib$es6$promise$$internal$$fulfill(promise, this._result);      }    };    lib$es6$promise$enumerator$$Enumerator.prototype._willSettleAt = function(promise, i) {      var enumerator = this;      lib$es6$promise$$internal$$subscribe(promise, undefined, function(value) {        enumerator._settledAt(lib$es6$promise$$internal$$FULFILLED, i, value);      }, function(reason) {        enumerator._settledAt(lib$es6$promise$$internal$$REJECTED, i, reason);      });    };    function lib$es6$promise$polyfill$$polyfill() {      var local;      if (typeof global !== 'undefined') {          local = global;      } else if (typeof self !== 'undefined') {          local = self;      } else {          try {              local = Function('return this')();          } catch (e) {              throw new Error('polyfill failed because global object is unavailable in this environment');          }      }      var P = local.Promise;      if (P && Object.prototype.toString.call(P.resolve()) === '[object Promise]' && !P.cast) {        return;      }      local.Promise = lib$es6$promise$promise$$default;    }    var lib$es6$promise$polyfill$$default = lib$es6$promise$polyfill$$polyfill;    lib$es6$promise$promise$$default.Promise = lib$es6$promise$promise$$default;    lib$es6$promise$promise$$default.polyfill = lib$es6$promise$polyfill$$default;    /* global define:true module:true window: true */    if (typeof define === 'function' && define['amd']) {      define(function() { return lib$es6$promise$promise$$default; });    } else if (typeof module !== 'undefined' && module['exports']) {      module['exports'] = lib$es6$promise$promise$$default;    } else if (typeof this !== 'undefined') {      this['Promise'] = lib$es6$promise$promise$$default;    }    lib$es6$promise$polyfill$$default();}).call(this);
 |