JavaScript:如何构造两个以上的回调

时间:2015-12-22 17:28:10

标签: javascript events syntax callback

我已经尝试过搜索这个,但无法在任何地方找到答案。

到目前为止,我一直在使用这样的回调:

function one(param, callback){
    //do stuff to param1
    callback()
}


function two(param){
    //do more stuff to param1
}

one(myParam, two)

这似乎工作正常。但是,我想使用三个功能。这不起作用:

function one(param, callback){
    //do stuff to param1
    callback();
}

function two(param, callback){
    //do more stuff to param1
    callback();
}

function three(param){
    //do even more stuff to param1
}

one(myParam, two(three))

我猜这是因为在将一个参数作为一个参数传递给一个时使用括号,使得“两个”立即执行。

如何构建我的代码,以便按正确的顺序执行该功能?

4 个答案:

答案 0 :(得分:2)

这是因为您将three设置为2的参数:

function one(param1, callback){
    alert(param1);
    callback("Second Called", three);
}

function two(param1, callback){
    //do more stuff to param1
    alert(param1);
    callback("Third Called");
}

function three(param1){
    alert(param1);
    //do even more stuff to param1
}

one("First Called", two);

答案 1 :(得分:1)

你需要做一点修正。

function one(param1, callback){
   //do stuff to param1
   // assuming param1 contains the processed value
    callback(param1,three);
 }

function two(param1, callback){
  //do more stuff to param1
  callback(param1);
}

function three(param1){
   //do even more stuff to param1
}
// call the function like this
one(myParam,two);

查看库Async.js。它非常适合处理异步活动。您可以更好地处理此类情况,并且您的代码将更具可读性。

答案 2 :(得分:0)

ads

如果要指定function one(param, callback){ //param = "apple" callback(param); } function two(paramFromOne){ //paramFromOne = "apple" three(paramFromOne) } function three(paramFromTwoViaOne){ //paramFromTwoViaOne = "apple" } //you are invoking two before it can do anything inside the callback context of one //one("apple", two(three)) //do this instead one("apple", two) 使用的回调,则必须使用闭包

two

答案 3 :(得分:0)

您可以使用数组和forEach循环简单地控制执行顺序。

var callbacks = [one, two, three];
callbacks.forEach(function(callback){
    callback(param);
});

当然,这里的假设是param的范围对于所有这些回调函数都是全局的。