我是java脚本的新手。我正在编写一些异步函数,让我们说func1, func2, func3
。但他们必须一个接一个地执行。所以我决定使用async
lib来逐个执行。
脚本文件:
function func1(param1,param2){
//dosomething ..
}
function func2(param3,param4){
//dosomething ..
}
function func3(param5,param6){
//dosomething ..
}
function myfunction(arr){
console.log(arr);
async.series(arr,function(){
//do something ..
});
}
HTML文件:
<a onclick="myfunction([func1('p1','p2'),func2('p3','p4'),func('p5','p6')])"></a>
但是,当我尝试console.log
时,它正在提供null,null,null
请给我一些解决方案。
答案 0 :(得分:7)
您没有传递一系列函数引用,而是传递了调用这些函数的结果数组。该数组将包含返回的任何函数(如果它们不返回任何内容,则为undefined
。)
如果要创建带有“烘焙”参数的函数引用,可以使用Function#bind
执行此操作:
myFunction([func1.bind(null, 'p1','p2'), ...])
// ^^^^^^^^^^^^ ^
Function#bind
创建了一个新函数,在调用时,会调用具有给定this
值的原始函数(我在假设上使用null
this
isn不重要)和你给出的参数bind
(后面跟着调用新函数的任何参数)。
示例:
myfunction([
func1.bind(null, 'p1', 'p2'),
func1.bind(null, 'p3', 'p4'),
func1.bind(null, 'p5', 'p6')
]);
function func1(arg1, arg2) {
console.log("func1 got (" + arg1 + "," + arg2 + ")");
}
function myfunction(functions) {
functions.forEach(function(f) {
f();
});
}