回调相同的功能

时间:2012-06-24 13:05:19

标签: javascript jquery

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

例如:

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

3 个答案:

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

只要留下了参数,就行了。

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

答案 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));