UNPKG

1.2 kBJavaScriptView Raw
1/** @license MIT License (c) copyright 2010-2014 original author or authors */
2/** @author Brian Cavalier */
3/** @author John Hann */
4
5(function(define) { 'use strict';
6define(function() {
7
8 makeApply.tryCatchResolve = tryCatchResolve;
9
10 return makeApply;
11
12 function makeApply(Promise, call) {
13 if(arguments.length < 2) {
14 call = tryCatchResolve;
15 }
16
17 return apply;
18
19 function apply(f, thisArg, args) {
20 var p = Promise._defer();
21 var l = args.length;
22 var params = new Array(l);
23 callAndResolve({ f:f, thisArg:thisArg, args:args, params:params, i:l-1, call:call }, p._handler);
24
25 return p;
26 }
27
28 function callAndResolve(c, h) {
29 if(c.i < 0) {
30 return call(c.f, c.thisArg, c.params, h);
31 }
32
33 var handler = Promise._handler(c.args[c.i]);
34 handler.fold(callAndResolveNext, c, void 0, h);
35 }
36
37 function callAndResolveNext(c, x, h) {
38 c.params[c.i] = x;
39 c.i -= 1;
40 callAndResolve(c, h);
41 }
42 }
43
44 function tryCatchResolve(f, thisArg, args, resolver) {
45 try {
46 resolver.resolve(f.apply(thisArg, args));
47 } catch(e) {
48 resolver.reject(e);
49 }
50 }
51
52});
53}(typeof define === 'function' && define.amd ? define : function(factory) { module.exports = factory(); }));
54
55