| /** @license MIT License (c) copyright 2010-2014 original author or authors */ |
| /** @author Brian Cavalier */ |
| /** @author John Hann */ |
| |
| (function(define) { 'use strict'; |
| define(function() { |
| |
| makeApply.tryCatchResolve = tryCatchResolve; |
| |
| return makeApply; |
| |
| function makeApply(Promise, call) { |
| if(arguments.length < 2) { |
| call = tryCatchResolve; |
| } |
| |
| return apply; |
| |
| function apply(f, thisArg, args) { |
| var p = Promise._defer(); |
| var l = args.length; |
| var params = new Array(l); |
| callAndResolve({ f:f, thisArg:thisArg, args:args, params:params, i:l-1, call:call }, p._handler); |
| |
| return p; |
| } |
| |
| function callAndResolve(c, h) { |
| if(c.i < 0) { |
| return call(c.f, c.thisArg, c.params, h); |
| } |
| |
| var handler = Promise._handler(c.args[c.i]); |
| handler.fold(callAndResolveNext, c, void 0, h); |
| } |
| |
| function callAndResolveNext(c, x, h) { |
| c.params[c.i] = x; |
| c.i -= 1; |
| callAndResolve(c, h); |
| } |
| } |
| |
| function tryCatchResolve(f, thisArg, args, resolver) { |
| try { |
| resolver.resolve(f.apply(thisArg, args)); |
| } catch(e) { |
| resolver.reject(e); |
| } |
| } |
| |
| }); |
| }(typeof define === 'function' && define.amd ? define : function(factory) { module.exports = factory(); })); |
| |
| |