Promise.when = function(){ var p = new _promise fns = Array.prototype.slice.call(arguments,0) fn.map(fns,function(fnc){ p.wait(fnc) }) fns[0].call(p) return p }
_accept :function(action , data){ if (!this._ondone.length && !this._onfail.length){ var self = this window.setTimeout(function(){ self[action].apply(self ,data) } , 0) return } if ('resolve' == action && this._waits.length){ var fnc = this._waits.shift() fnc.apply(this , data ) return } fn.map('resolve' == action ? this._ondone : this._onfail,function(fnc){ fnc.apply(null , data) }) this._clear() },