UNPKG

fmd.js

Version:

another module writing system

91 lines (65 loc) 1.98 kB
/** * @module fmd/when * @author Edgar <mail@edgar.im> * @version v0.1 * @date 130419 * */ fmd( 'when', function(){ 'use strict'; /** * Thanks to: * cujo.js, https://github.com/cujojs/curl/blob/master/src/curl.js * jQuery, https://github.com/jquery/jquery/blob/1.7.2/src/deferred.js * */ var noop = function(){}; var Promise = function( len ){ var _this = this, thens = [], resolved = 0, rejected = 0; len = len || 0; var probe = function(){ if ( resolved + rejected === len ){ complete(); } }, complete = function(){ _this.then = !rejected ? function( resolved, rejected ){ resolved && resolved(); } : function( resolved, rejected ){ rejected && rejected(); }; complete = noop; notify( !rejected ? 0 : 1 ); notify = noop; thens = []; }, notify = function( which ){ var then, callback, i = 0; while ( ( then = thens[i++] ) ){ callback = then[which]; callback && callback(); } }; this.then = function( resolved, rejected ){ thens.push( [resolved, rejected] ); }; this.resolve = function(){ resolved++; probe(); }; this.reject = function(){ rejected++; probe(); }; probe(); }; var when = function(){ var l = arguments.length, promise = new Promise(l), fn, i = 0; while ( ( fn = arguments[i++] ) ){ fn( promise ); } return promise; }; return when; } );