我想多次调用一个函数,每次都为它提供不同的输入,但是我试图确保在上一个函数调用完成后触发下一个函数调用。
例如:
func(1,2);
func(9,3);
func(6,4);
func(5,6);
我看到回调被编码为;
function1(someVariable, function() {
function2(someOtherVariable);
});
但这仅在调用第二个函数时有效,我尝试链接函数,但这只允许我运行一定数量的函数。
有没有办法可以将某种呼叫应用回同一个功能?
note ::该函数只添加一个类。
func(x, y){
$("#block").addClass("class");
setTimeout(function(){
$("#block").removeClass("class");
},1000);
};
答案 0 :(得分:4)
function func(x,y,callback) {
console.log(x,y);
$("#block").addClass("class");
setTimeout(function(){
$("#block").removeClass("class");
callback();
},1000);
};
var params = [
[1,2],
[9,3],
[6,4],
[5,6]
], i = 0;
function fn() {
if( params[i] ) {
func( params[i][0], params[i++][1], fn );
}
}
fn();
只要留下了参数,就行了。
答案 1 :(得分:2)
您可以使用附加参数修改func
函数,该参数表示函数成功时执行的回调:
func(x, y, finished) {
$("#block").addClass("class");
window.setTimeout(function() {
$("#block").removeClass("class");
finished();
}, 1000);
};
然后链接调用:
func(1, 2, function() {
func(9, 3, function() {
func(6, 4, function() {
func(5, 6, function() {
alert('all done');
});
});
});
});
答案 2 :(得分:0)
我认为我们应该使用jquery中提供的promise模式解决这个问题,它允许在没有复杂语法的情况下链接回调,请参阅下面的伪代码以供参考
function func(value1, value2) {
var deffered = jQuery.Deferred();
alert(value1);
deffered.resolve();
return deffered;
}
jQuery.when(func(1, 2)).then(func(2, 3)).then(func(3,4));