我已经尝试过搜索这个,但无法在任何地方找到答案。
到目前为止,我一直在使用这样的回调:
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))
我猜这是因为在将一个参数作为一个参数传递给一个时使用括号,使得“两个”立即执行。
如何构建我的代码,以便按正确的顺序执行该功能?
答案 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的范围对于所有这些回调函数都是全局的。