如何一个接一个地执行节点js函数,这些函数在字符串数组中使用它们的名称动态列出

时间:2016-07-21 10:18:32

标签: javascript node.js

我需要在我的Node.js程序中实现以下功能。

  1. 如何从字符串中提供的名称创建函数数组?
  2. 如何一个接一个地执行这些功能。不是异步的。
  3. 如何传递这些功能的参数。
  4. 建议我一个更好的方法来实现这个或已经实现了这个的代码片段。

3 个答案:

答案 0 :(得分:1)

步骤1.定义列表

var functions = ["foo", "bar", "baz"];

步骤2.迭代列表

我们遍历函数列表并调用__call函数。

functions.forEach(function(f){
   __call(f);
});

步骤3.调用函数

此步骤取决于框架。如果您正在使用节点,则必须使用global对象。如果您使用的是浏览器(HTML),则必须使用window对象。

对于前者,请使用:

__call = function(f) { 
    var args = []; 
    for(var i = 1; i<arguments.length; i++){
        args.push(arguments[i])
    }; 
    console.log(args);
    global[f].apply(null, args); 
};

对于后者,请使用:

 __call = function(f) { 
    var args = []; 
    for(var i = 1; i<arguments.length; i++){
        args.push(arguments[i])
    }; 
    console.log(args);
    window[f].apply(null, args); 
};

唯一的区别是我们使用windowglobal词典来访问该功能。

编辑:添加了传递参数。

答案 1 :(得分:1)

你可以这样做;

function foo(v){console.log("foo: ",v)};
function bar(v){console.log("bar: ",v)};

var funs = ["foo", "bar"],
       i = 0;
while (i < funs.length) this[funs[i]](i++);

当然,您的函数定义可能位于特定范围内,您可能需要从内部调用它们。在这种情况下,您当然可以将上面的代码包装在一个函数中,并将其绑定到您的函数定义所在的任何范围。例如

var obj = {
           foo: function(v){console.log("foo: ",v)},
           bar: function(v){console.log("bar: ",v)}
          },
   funs = ["foo", "bar"],
 runner = function(a){
            var i = 0;
            while (i < a.length) this[a[i]](i++);
          }.bind(obj);
     
runner(funs);

答案 2 :(得分:0)

  1. 您可以通过以下名称调用函数:

    const functions = [&#39; index&#39;,&#39; push&#39; ...];

    functions[0]() // write your parameters inside. this will call 'index'
    
  2. 如果这些功能不是异步,只需一个接一个地写入调用。如果它们是异步的,请使用async.waterfall或async.series等帮助程序。

  3. 见1.