ya-promise
Version:
Yet Another promise/A+ library
1 lines • 3.75 kB
JavaScript
(function(e){if(typeof bootstrap==="function"){bootstrap("promise",e)}else if(typeof exports==="object"){module.exports=e()}else if(typeof define==="function"&&define.amd){define(e)}else if(typeof ses!=="undefined"){if(!ses.ok()){return}else{ses.makeY=e}}else{Y=e()}})(function(){"use strict";function e(t){return e.when(t)}e.defer=function(){return new o};e.deferred=e.defer;e.resolved=function(e){var t=new o;t.resolve(e);return t.promise};e.rejected=function(e){var t=new o;t.reject(e);return t.promise};e.when=function(e){if(t(e))return e;var n=new o;if(e&&typeof e.then==="function")e.then(function(e){n.resolve(e)},function(e){n.reject(e)});else n.resolve(e);return n.promise};e.all=function(t){var n=0,r=e.defer(),o=[];t.forEach(function(t,i){n+=1;e.when(t).then(function(e){n-=1;o[i]=e;if(n===0)r.resolve(o)},function(e){r.reject(e)})});return r.promise};e.delay=function(t){return e.resolved().delay(t)};e.promisify=l;e.nfbind=l;e.denodeify=l;e.isPromise=function(e){return e instanceof i};e.isDeferred=function(e){return e instanceof o};var t=e.isPromise,n=e.isDeferred;var r;Object.defineProperty(e,"nextTick",{get:function(){return r},set:function(e){r=e;return e},configurable:true,enumerable:true});if(typeof setImmediate==="function"){if(typeof window!=="undefined")e.nextTick=setImmediate.bind(window);else e.nextTick=setImmediate}else if(typeof process!=="undefined"&&process.nextTick)e.nextTick=process.nextTick;else e.nextTick=function(e){setTimeout(e,0)};function o(){var e=[],t=new i(r,l),n=this;this.promise=t;this.resolve=a;this.reject=d;function r(t,n){var r=new o;e.push({deferred:r,fulfilled:t,rejected:n,spread:false});return r.promise}function l(t,n){var r=new o;e.push({deferred:r,fulfilled:t,rejected:n,spread:true});return r.promise}function a(r){for(var o=0;o<e.length;o++){if(typeof e[o].fulfilled!=="function")e[o].deferred.resolve(r);else c(e[o].fulfilled,r,e[o].deferred,e[o].spread)}n.reject=n.resolve=s;t.then=f(t,r,false);t.spread=f(t,r,true)}function d(r){for(var o=0;o<e.length;o++){if(typeof e[o].rejected!=="function")e[o].deferred.reject(r);else c(e[o].rejected,r,e[o].deferred,false)}n.reject=n.resolve=s;t.then=u(t,r);t.spread=u(t,r)}}function i(e,t){this.then=e;this.spread=t}i.prototype.timeout=function(t){var n=e.defer(),r=setTimeout(function(){n.reject("Timed out after "+t+" ms")},t);if(typeof r.unref==="function")r.unref();this.then(function(e){clearTimeout(r);n.resolve(e)},function(e){clearTimeout(r);n.reject(e)});return n.promise};i.prototype.delay=function(t){var n=e.defer(),r=n.promise,o=Date.now();setTimeout(function(){},t);this.then(function(e){var r=Date.now()-o;if(t-r>0)setTimeout(function(){n.resolve(e)},t-r);else n.resolve(e)},function(e){var r=Date.now()-o;if(t-r>0)setTimeout(function(){n.reject(e)},t-r);else n.reject(e)});return r};i.prototype.fail=function(e){return this.then(null,e)};i.prototype.catch=i.prototype.fail;i.prototype.done=function(){return this.fail(function(e){r(function(){throw e})})};function f(e,t,n){n=n||false;return function r(r,i){var f;if(typeof r!=="function")return e;c(r,t,f=new o,n);return f.promise}}function u(e,t){return function n(n,r){var i;if(typeof r!=="function")return e;c(r,t,i=new o,false);return i.promise}}function s(){}function c(e,t,n,o){r(function(){var r;try{if(o&&Array.isArray(t))r=e.apply(void 0,t);else r=e(t);if(r&&typeof r.then=="function")r.then(function(e){n.resolve(e)},function(e){n.reject(e)});else n.resolve(r)}catch(i){n.reject(i)}})}function l(t,n){return function(){var r=Array.prototype.slice.call(arguments),o=e.defer();r.push(function(e){if(e){o.reject(e);return}if(arguments.length>2)o.resolve(Array.prototype.slice.call(arguments,1));else o.resolve(arguments[1])});t.apply(n,r);return o.promise}}return e});