5

我想多次调用一个函数,每次都为其提供不同的输入,但是我试图确保在前一个函数调用完成后触发下一个函数调用。

例如:

func(1,2);
func(9,3);
func(6,4);
func(5,6);

我已经看到回调被编码为;

function1(someVariable, function() {
          function2(someOtherVariable);
        });

但这仅在调用第二个函数时有效,我尝试链接函数,但这仅允许我运行一组函数。

有没有办法可以将某种回调应用到同一个函数?

注意::该函数只是添加了一个类。

func(x, y){
   $("#block").addClass("class");
    setTimeout(function(){ 
         $("#block").removeClass("class");
     },1000);
};
4

3 回答 3

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();

只要还有参数,就会去。

小提琴:http: //jsfiddle.net/sabithpocker/dQX6s/

于 2012-06-24T13:21:29.883 回答
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');
            });
        });
    });
});
于 2012-06-24T13:15:40.063 回答
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));
于 2012-06-24T14:32:11.253 回答