Comparing version 0.4.4 to 0.4.5
/** | ||
* @module vow | ||
* @author Filatov Dmitry <dfilatov@yandex-team.ru> | ||
* @version 0.4.4 | ||
* @version 0.4.5 | ||
* @license | ||
@@ -108,4 +108,5 @@ * Dual licensed under the MIT and GPL licenses: | ||
PENDING : 0, | ||
FULFILLED : 1, | ||
REJECTED : -1 | ||
RESOLVED : 1, | ||
FULFILLED : 2, | ||
REJECTED : 3 | ||
}; | ||
@@ -411,3 +412,3 @@ | ||
_resolve : function(val) { | ||
if(this._status !== PROMISE_STATUS.PENDING) { | ||
if(this._status > PROMISE_STATUS.RESOLVED) { | ||
return; | ||
@@ -421,8 +422,14 @@ } | ||
this._status = PROMISE_STATUS.RESOLVED; | ||
if(val && !!val._vow) { // shortpath for vow.Promise | ||
val.then( | ||
this._resolve, | ||
this._reject, | ||
this._notify, | ||
this); | ||
val.isFulfilled()? | ||
this._fulfill(val.valueOf()) : | ||
val.isRejected()? | ||
this._reject(val.valueOf()) : | ||
val.then( | ||
this._fulfill, | ||
this._reject, | ||
this._notify, | ||
this); | ||
return; | ||
@@ -480,3 +487,3 @@ } | ||
_fulfill : function(val) { | ||
if(this._status !== PROMISE_STATUS.PENDING) { | ||
if(this._status > PROMISE_STATUS.RESOLVED) { | ||
return; | ||
@@ -493,3 +500,3 @@ } | ||
_reject : function(reason) { | ||
if(this._status !== PROMISE_STATUS.PENDING) { | ||
if(this._status > PROMISE_STATUS.RESOLVED) { | ||
return; | ||
@@ -535,3 +542,3 @@ } | ||
if(this._status === PROMISE_STATUS.PENDING) { | ||
if(this._status <= PROMISE_STATUS.RESOLVED) { | ||
this._progressCallbacks.push({ defer : defer, fn : onProgress, ctx : ctx }); | ||
@@ -836,5 +843,12 @@ } | ||
fulfill : function(value) { | ||
return vow.when(value, null, function(reason) { | ||
return reason; | ||
}); | ||
var defer = vow.defer(), | ||
promise = defer.promise(); | ||
defer.resolve(value); | ||
return promise.isFulfilled()? | ||
promise : | ||
promise.then(null, function(reason) { | ||
return reason; | ||
}); | ||
}, | ||
@@ -850,5 +864,13 @@ | ||
reject : function(reason) { | ||
return vow.when(reason, function(val) { | ||
throw val; | ||
}); | ||
if(vow.isPromise(reason)) { | ||
return reason.then(function(val) { | ||
var defer = vow.defer(); | ||
defer.reject(val); | ||
return defer.promise(); | ||
}); | ||
} | ||
var defer = vow.defer(); | ||
defer.reject(reason); | ||
return defer.promise(); | ||
}, | ||
@@ -855,0 +877,0 @@ |
{ | ||
"name" : "vow", | ||
"version" : "0.4.4", | ||
"version" : "0.4.5", | ||
"description" : "DOM Promise and Promises/A+ implementation for Node.js and browsers", | ||
@@ -5,0 +5,0 @@ "homepage" : "https://github.com/dfilatov/vow", |
/** | ||
* @module vow | ||
* @author Filatov Dmitry <dfilatov@yandex-team.ru> | ||
* @version 0.4.3 | ||
* @version 0.4.5 | ||
* @license | ||
@@ -9,2 +9,2 @@ * Dual licensed under the MIT and GPL licenses: | ||
* * http://www.gnu.org/licenses/gpl.html | ||
*/(function(e){var t=function(){this._promise=new r};t.prototype={promise:function(){return this._promise},resolve:function(e){this._promise.isResolved()||this._promise._resolve(e)},reject:function(e){this._promise.isResolved()||this._promise._reject(e)},notify:function(e){this._promise.isResolved()||this._promise._notify(e)}};var n={PENDING:0,FULFILLED:1,REJECTED:-1},r=function(e){this._value=u,this._status=n.PENDING,this._fulfilledCallbacks=[],this._rejectedCallbacks=[],this._progressCallbacks=[];if(e){var t=this,r=e.length;e(function(e){t.isResolved()||t._resolve(e)},r>1?function(e){t.isResolved()||t._reject(e)}:u,r>2?function(e){t.isResolved()||t._notify(e)}:u)}};r.prototype={valueOf:function(){return this._value},isResolved:function(){return this._status!==n.PENDING},isFulfilled:function(){return this._status===n.FULFILLED},isRejected:function(){return this._status===n.REJECTED},then:function(e,n,r,i){var s=new t;return this._addCallbacks(s,e,n,r,i),s.promise()},"catch":function(e,t){return this.then(u,e,t)},fail:function(e,t){return this.then(u,e,t)},always:function(e,t){var n=this,r=function(){return e.call(this,n)};return this.then(r,r,t)},progress:function(e,t){return this.then(u,u,e,t)},spread:function(e,t,n){return this.then(function(t){return e.apply(this,t)},t,n)},done:function(e,t,n,r){this.then(e,t,n,r).fail(f)},delay:function(e){var n,r=this.then(function(r){var i=new t;return n=setTimeout(function(){i.resolve(r)},e),i.promise()});return r.always(function(){clearTimeout(n)}),r},timeout:function(e){var n=new t,r=setTimeout(function(){n.reject(Error("timed out"))},e);return this.then(function(e){n.resolve(e)},function(e){n.reject(e)}),n.promise().always(function(){clearTimeout(r)}),n.promise()},_vow:!0,_resolve:function(e){if(this._status!==n.PENDING)return;if(e===this){this._reject(TypeError("Can't resolve promise with itself"));return}if(e&&!!e._vow){e.then(this._resolve,this._reject,this._notify,this);return}if(c(e)||l(e)){var t;try{t=e.then}catch(r){this._reject(r);return}if(l(t)){var i=this,s=!1;try{t.call(e,function(e){if(s)return;s=!0,i._resolve(e)},function(e){if(s)return;s=!0,i._reject(e)},function(e){i._notify(e)})}catch(r){s||this._reject(r)}return}}this._fulfill(e)},_fulfill:function(e){if(this._status!==n.PENDING)return;this._status=n.FULFILLED,this._value=e,this._callCallbacks(this._fulfilledCallbacks,e),this._fulfilledCallbacks=this._rejectedCallbacks=this._progressCallbacks=u},_reject:function(e){if(this._status!==n.PENDING)return;this._status=n.REJECTED,this._value=e,this._callCallbacks(this._rejectedCallbacks,e),this._fulfilledCallbacks=this._rejectedCallbacks=this._progressCallbacks=u},_notify:function(e){this._callCallbacks(this._progressCallbacks,e)},_addCallbacks:function(e,t,r,i,s){r&&!l(r)?(s=r,r=u):i&&!l(i)&&(s=i,i=u);var o;this.isRejected()||(o={defer:e,fn:l(t)?t:u,ctx:s},this.isFulfilled()?this._callCallbacks([o],this._value):this._fulfilledCallbacks.push(o)),this.isFulfilled()||(o={defer:e,fn:r,ctx:s},this.isRejected()?this._callCallbacks([o],this._value):this._rejectedCallbacks.push(o)),this._status===n.PENDING&&this._progressCallbacks.push({defer:e,fn:i,ctx:s})},_callCallbacks:function(e,t){var n=e.length;if(!n)return;var r=this.isResolved(),i=this.isFulfilled();a(function(){var s=0,o,u,a;while(s<n){o=e[s++],u=o.defer,a=o.fn;if(a){var f=o.ctx,l;try{l=f?a.call(f,t):a(t)}catch(c){u.reject(c);continue}r?u.resolve(l):u.notify(l)}else r?i?u.resolve(t):u.reject(t):u.notify(t)}})}};var i={cast:function(e){return o.cast(e)},all:function(e){return o.all(e)},race:function(e){return o.anyResolved(e)},resolve:function(e){return o.resolve(e)},reject:function(e){return o.reject(e)}};for(var s in i)i.hasOwnProperty(s)&&(r[s]=i[s]);var o={Deferred:t,Promise:r,defer:function(){return new t},when:function(e,t,n,r,i){return o.cast(e).then(t,n,r,i)},fail:function(e,t,n){return o.when(e,u,t,n)},always:function(e,t,n){return o.when(e).always(t,n)},progress:function(e,t,n){return o.when(e).progress(t,n)},spread:function(e,t,n,r){return o.when(e).spread(t,n,r)},done:function(e,t,n,r,i){o.when(e).done(t,n,r,i)},isPromise:function(e){return c(e)&&l(e.then)},cast:function(e){return o.isPromise(e)?e:o.resolve(e)},valueOf:function(e){return e&&l(e.valueOf)?e.valueOf():e},isFulfilled:function(e){return e&&l(e.isFulfilled)?e.isFulfilled():!0},isRejected:function(e){return e&&l(e.isRejected)?e.isRejected():!1},isResolved:function(e){return e&&l(e.isResolved)?e.isResolved():!0},resolve:function(e){var t=o.defer();return t.resolve(e),t.promise()},fulfill:function(e){return o.when(e,null,function(e){return e})},reject:function(e){return o.when(e,function(e){throw e})},invoke:function(t,n){var r=Math.max(arguments.length-1,0),i;if(r){i=Array(r);var s=0;while(s<r)i[s++]=arguments[s]}try{return o.resolve(i?t.apply(e,i):t.call(e))}catch(u){return o.reject(u)}},all:function(e){var n=new t,r=p(e),i=r?d(e):v(e),s=i.length,u=r?[]:{};if(!s)return n.resolve(u),n.promise();var a=s;return o._forEach(e,function(){if(!--a){var t=0;while(t<s)u[i[t]]=o.valueOf(e[i[t++]]);n.resolve(u)}},n.reject,n.notify,n,i),n.promise()},allResolved:function(e){var n=new t,r=p(e),i=r?d(e):v(e),s=i.length,u=r?[]:{};if(!s)return n.resolve(u),n.promise();var a=function(){--s||n.resolve(e)};return o._forEach(e,a,a,n.notify,n,i),n.promise()},allPatiently:function(e){return o.allResolved(e).then(function(){var t=p(e),n=t?d(e):v(e),r,i,s=n.length,u=0,a,f;if(!s)return t?[]:{};while(u<s)a=n[u++],f=e[a],o.isRejected(f)?(r||(r=t?[]:{}),t?r.push(f.valueOf()):r[a]=f.valueOf()):r||((i||(i=t?[]:{}))[a]=o.valueOf(f));if(r)throw r;return i})},any:function(e){var n=new t,r=e.length;if(!r)return n.reject(Error()),n.promise();var i=0,s;return o._forEach(e,n.resolve,function(e){i||(s=e),++i===r&&n.reject(s)},n.notify,n),n.promise()},anyResolved:function(e){var n=new t,r=e.length;return r?(o._forEach(e,n.resolve,n.reject,n.notify,n),n.promise()):(n.reject(Error()),n.promise())},delay:function(e,t){return o.resolve(e).delay(t)},timeout:function(e,t){return o.resolve(e).timeout(t)},_forEach:function(e,t,n,r,i,s){var u=s?s.length:e.length,a=0;while(a<u)o.when(e[s?s[a]:a],t,n,r,i),++a}},u,a=function(){var t=[],n=function(e){return t.push(e)===1},r=function(){var e=t,n=0,r=t.length;t=[];while(n<r)e[n++]()};if(typeof setImmediate=="function")return function(e){n(e)&&setImmediate(r)};if(typeof process=="object"&&process.nextTick)return function(e){n(e)&&process.nextTick(r)};if(e.postMessage){var i=!0;if(e.attachEvent){var s=function(){i=!1};e.attachEvent("onmessage",s),e.postMessage("__checkAsync","*"),e.detachEvent("onmessage",s)}if(i){var o="__promise"+ +(new Date),u=function(e){e.data===o&&(e.stopPropagation&&e.stopPropagation(),r())};return e.addEventListener?e.addEventListener("message",u,!0):e.attachEvent("onmessage",u),function(t){n(t)&&e.postMessage(o,"*")}}}var a=e.document;if("onreadystatechange"in a.createElement("script")){var f=function(){var e=a.createElement("script");e.onreadystatechange=function(){e.parentNode.removeChild(e),e=e.onreadystatechange=null,r()},(a.documentElement||a.body).appendChild(e)};return function(e){n(e)&&f()}}return function(e){n(e)&&setTimeout(r,0)}}(),f=function(e){a(function(){throw e})},l=function(e){return typeof e=="function"},c=function(e){return e!==null&&typeof e=="object"},h=Object.prototype.toString,p=Array.isArray||function(e){return h.call(e)==="[object Array]"},d=function(e){var t=[],n=0,r=e.length;while(n<r)t.push(n++);return t},v=Object.keys||function(e){var t=[];for(var n in e)e.hasOwnProperty(n)&&t.push(n);return t},m=!0;typeof exports=="object"&&(module.exports=o,m=!1),typeof modules=="object"&&(modules.define("vow",function(e){e(o)}),m=!1),typeof define=="function"&&(define(function(e,t,n){n.exports=o}),m=!1),m&&(e.vow=o)})(this); | ||
*/(function(e){var t=function(){this._promise=new r};t.prototype={promise:function(){return this._promise},resolve:function(e){this._promise.isResolved()||this._promise._resolve(e)},reject:function(e){this._promise.isResolved()||this._promise._reject(e)},notify:function(e){this._promise.isResolved()||this._promise._notify(e)}};var n={PENDING:0,RESOLVED:1,FULFILLED:2,REJECTED:3},r=function(e){this._value=u,this._status=n.PENDING,this._fulfilledCallbacks=[],this._rejectedCallbacks=[],this._progressCallbacks=[];if(e){var t=this,r=e.length;e(function(e){t.isResolved()||t._resolve(e)},r>1?function(e){t.isResolved()||t._reject(e)}:u,r>2?function(e){t.isResolved()||t._notify(e)}:u)}};r.prototype={valueOf:function(){return this._value},isResolved:function(){return this._status!==n.PENDING},isFulfilled:function(){return this._status===n.FULFILLED},isRejected:function(){return this._status===n.REJECTED},then:function(e,n,r,i){var s=new t;return this._addCallbacks(s,e,n,r,i),s.promise()},"catch":function(e,t){return this.then(u,e,t)},fail:function(e,t){return this.then(u,e,t)},always:function(e,t){var n=this,r=function(){return e.call(this,n)};return this.then(r,r,t)},progress:function(e,t){return this.then(u,u,e,t)},spread:function(e,t,n){return this.then(function(t){return e.apply(this,t)},t,n)},done:function(e,t,n,r){this.then(e,t,n,r).fail(f)},delay:function(e){var n,r=this.then(function(r){var i=new t;return n=setTimeout(function(){i.resolve(r)},e),i.promise()});return r.always(function(){clearTimeout(n)}),r},timeout:function(e){var n=new t,r=setTimeout(function(){n.reject(Error("timed out"))},e);return this.then(function(e){n.resolve(e)},function(e){n.reject(e)}),n.promise().always(function(){clearTimeout(r)}),n.promise()},_vow:!0,_resolve:function(e){if(this._status>n.RESOLVED)return;if(e===this){this._reject(TypeError("Can't resolve promise with itself"));return}this._status=n.RESOLVED;if(e&&!!e._vow){e.isFulfilled()?this._fulfill(e.valueOf()):e.isRejected()?this._reject(e.valueOf()):e.then(this._fulfill,this._reject,this._notify,this);return}if(c(e)||l(e)){var t;try{t=e.then}catch(r){this._reject(r);return}if(l(t)){var i=this,s=!1;try{t.call(e,function(e){if(s)return;s=!0,i._resolve(e)},function(e){if(s)return;s=!0,i._reject(e)},function(e){i._notify(e)})}catch(r){s||this._reject(r)}return}}this._fulfill(e)},_fulfill:function(e){if(this._status>n.RESOLVED)return;this._status=n.FULFILLED,this._value=e,this._callCallbacks(this._fulfilledCallbacks,e),this._fulfilledCallbacks=this._rejectedCallbacks=this._progressCallbacks=u},_reject:function(e){if(this._status>n.RESOLVED)return;this._status=n.REJECTED,this._value=e,this._callCallbacks(this._rejectedCallbacks,e),this._fulfilledCallbacks=this._rejectedCallbacks=this._progressCallbacks=u},_notify:function(e){this._callCallbacks(this._progressCallbacks,e)},_addCallbacks:function(e,t,r,i,s){r&&!l(r)?(s=r,r=u):i&&!l(i)&&(s=i,i=u);var o;this.isRejected()||(o={defer:e,fn:l(t)?t:u,ctx:s},this.isFulfilled()?this._callCallbacks([o],this._value):this._fulfilledCallbacks.push(o)),this.isFulfilled()||(o={defer:e,fn:r,ctx:s},this.isRejected()?this._callCallbacks([o],this._value):this._rejectedCallbacks.push(o)),this._status<=n.RESOLVED&&this._progressCallbacks.push({defer:e,fn:i,ctx:s})},_callCallbacks:function(e,t){var n=e.length;if(!n)return;var r=this.isResolved(),i=this.isFulfilled();a(function(){var s=0,o,u,a;while(s<n){o=e[s++],u=o.defer,a=o.fn;if(a){var f=o.ctx,l;try{l=f?a.call(f,t):a(t)}catch(c){u.reject(c);continue}r?u.resolve(l):u.notify(l)}else r?i?u.resolve(t):u.reject(t):u.notify(t)}})}};var i={cast:function(e){return o.cast(e)},all:function(e){return o.all(e)},race:function(e){return o.anyResolved(e)},resolve:function(e){return o.resolve(e)},reject:function(e){return o.reject(e)}};for(var s in i)i.hasOwnProperty(s)&&(r[s]=i[s]);var o={Deferred:t,Promise:r,defer:function(){return new t},when:function(e,t,n,r,i){return o.cast(e).then(t,n,r,i)},fail:function(e,t,n){return o.when(e,u,t,n)},always:function(e,t,n){return o.when(e).always(t,n)},progress:function(e,t,n){return o.when(e).progress(t,n)},spread:function(e,t,n,r){return o.when(e).spread(t,n,r)},done:function(e,t,n,r,i){o.when(e).done(t,n,r,i)},isPromise:function(e){return c(e)&&l(e.then)},cast:function(e){return o.isPromise(e)?e:o.resolve(e)},valueOf:function(e){return e&&l(e.valueOf)?e.valueOf():e},isFulfilled:function(e){return e&&l(e.isFulfilled)?e.isFulfilled():!0},isRejected:function(e){return e&&l(e.isRejected)?e.isRejected():!1},isResolved:function(e){return e&&l(e.isResolved)?e.isResolved():!0},resolve:function(e){var t=o.defer();return t.resolve(e),t.promise()},fulfill:function(e){var t=o.defer(),n=t.promise();return t.resolve(e),n.isFulfilled()?n:n.then(null,function(e){return e})},reject:function(e){if(o.isPromise(e))return e.then(function(e){var t=o.defer();return t.reject(e),t.promise()});var t=o.defer();return t.reject(e),t.promise()},invoke:function(t,n){var r=Math.max(arguments.length-1,0),i;if(r){i=Array(r);var s=0;while(s<r)i[s++]=arguments[s]}try{return o.resolve(i?t.apply(e,i):t.call(e))}catch(u){return o.reject(u)}},all:function(e){var n=new t,r=p(e),i=r?d(e):v(e),s=i.length,u=r?[]:{};if(!s)return n.resolve(u),n.promise();var a=s;return o._forEach(e,function(){if(!--a){var t=0;while(t<s)u[i[t]]=o.valueOf(e[i[t++]]);n.resolve(u)}},n.reject,n.notify,n,i),n.promise()},allResolved:function(e){var n=new t,r=p(e),i=r?d(e):v(e),s=i.length,u=r?[]:{};if(!s)return n.resolve(u),n.promise();var a=function(){--s||n.resolve(e)};return o._forEach(e,a,a,n.notify,n,i),n.promise()},allPatiently:function(e){return o.allResolved(e).then(function(){var t=p(e),n=t?d(e):v(e),r,i,s=n.length,u=0,a,f;if(!s)return t?[]:{};while(u<s)a=n[u++],f=e[a],o.isRejected(f)?(r||(r=t?[]:{}),t?r.push(f.valueOf()):r[a]=f.valueOf()):r||((i||(i=t?[]:{}))[a]=o.valueOf(f));if(r)throw r;return i})},any:function(e){var n=new t,r=e.length;if(!r)return n.reject(Error()),n.promise();var i=0,s;return o._forEach(e,n.resolve,function(e){i||(s=e),++i===r&&n.reject(s)},n.notify,n),n.promise()},anyResolved:function(e){var n=new t,r=e.length;return r?(o._forEach(e,n.resolve,n.reject,n.notify,n),n.promise()):(n.reject(Error()),n.promise())},delay:function(e,t){return o.resolve(e).delay(t)},timeout:function(e,t){return o.resolve(e).timeout(t)},_forEach:function(e,t,n,r,i,s){var u=s?s.length:e.length,a=0;while(a<u)o.when(e[s?s[a]:a],t,n,r,i),++a}},u,a=function(){var t=[],n=function(e){return t.push(e)===1},r=function(){var e=t,n=0,r=t.length;t=[];while(n<r)e[n++]()};if(typeof setImmediate=="function")return function(e){n(e)&&setImmediate(r)};if(typeof process=="object"&&process.nextTick)return function(e){n(e)&&process.nextTick(r)};if(e.postMessage){var i=!0;if(e.attachEvent){var s=function(){i=!1};e.attachEvent("onmessage",s),e.postMessage("__checkAsync","*"),e.detachEvent("onmessage",s)}if(i){var o="__promise"+ +(new Date),u=function(e){e.data===o&&(e.stopPropagation&&e.stopPropagation(),r())};return e.addEventListener?e.addEventListener("message",u,!0):e.attachEvent("onmessage",u),function(t){n(t)&&e.postMessage(o,"*")}}}var a=e.document;if("onreadystatechange"in a.createElement("script")){var f=function(){var e=a.createElement("script");e.onreadystatechange=function(){e.parentNode.removeChild(e),e=e.onreadystatechange=null,r()},(a.documentElement||a.body).appendChild(e)};return function(e){n(e)&&f()}}return function(e){n(e)&&setTimeout(r,0)}}(),f=function(e){a(function(){throw e})},l=function(e){return typeof e=="function"},c=function(e){return e!==null&&typeof e=="object"},h=Object.prototype.toString,p=Array.isArray||function(e){return h.call(e)==="[object Array]"},d=function(e){var t=[],n=0,r=e.length;while(n<r)t.push(n++);return t},v=Object.keys||function(e){var t=[];for(var n in e)e.hasOwnProperty(n)&&t.push(n);return t},m=!0;typeof exports=="object"&&(module.exports=o,m=!1),typeof modules=="object"&&(modules.define("vow",function(e){e(o)}),m=!1),typeof define=="function"&&(define(function(e,t,n){n.exports=o}),m=!1),m&&(e.vow=o)})(this); |
48119
4
1184