async系列,如何使用具有特定绑定变量的函数

时间:2015-05-06 13:56:50

标签: javascript node.js

假设我有一个包含名称的表,我想在函数中使用所有这些名称。 例如var names = ['joe','sam', 'nick']; 假设我有以下功能:

function doSomething (string1, NAME, string2, callback){
   ....
   console.log(string1," ",NAME," ",string2);
   ...
   callback(null,"ok");
}

假设它是异步的,我将使用async.each函数。 而且,我想在函数中传递变量,使用bind这样:

async.each(names,doSomething.bind(this, "example1", "example2",function(err){
   console.log(err);
});

我收到以下消息:

example1 example2 joe 
example1 example2 nick
example1 example2 sam

我想要的是在第一和第三位置绑定字符串并将名称分配给第二个。可以这样做吗?如何? 我在这里错过了JavaScript的基础知识吗?

2 个答案:

答案 0 :(得分:5)

  

我想要的是在第一和第三位置绑定字符串并将名称分配给第二个。可以这样做吗?

不在.bind。它只允许您绑定第一个n参数,但不能绑定第一个n中的某些参数。

您可以简单地使用其他功能:

async.each(names, function(name, cb) {
    doSomething("example1", name, "example2", cb);
});

并以您喜欢的任何顺序传递参数。

答案 1 :(得分:0)

它可能不是最漂亮的解决方案,但你可以包装doSomething函数并重新排序参数:

ImmutableMap.Builder