nisp
Version:
A language that for easily build cross-language language
28 lines (27 loc) • 881 B
JavaScript
;
exports.__esModule = true;
var core_1 = require("../core");
var root = typeof window === 'object' ? window : global;
// ["fn", <arg1>, <arg2>, ...]
exports["default"] = function (fn, customPromise) {
var P = customPromise || root['Promise']; // eslint-disable-line
return core_1.macro(function (ctx) {
var ast = ctx.ast;
var syncedArgs = [];
var p = ast.length > 1 ?
P.resolve(core_1.arg(ctx, 1))
: P.resolve();
var f = function (i) { return function (v) {
syncedArgs.push(v);
return core_1.arg(ctx, i);
}; };
for (var i = 2; i < ast.length; i++) {
p = p.then(f(i));
}
return p.then(function (v) {
if (ast.length > 1)
syncedArgs.push(v);
return fn.apply(ctx, syncedArgs);
});
});
};