5

関数を何度も呼び出して、毎回異なる入力を提供したいのですが、前の関数呼び出しが終了した後に次の関数呼び出しがトリガーされるようにしようとしています。

例えば:

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

コールバックが次のようにコード化されているのを見てきました。

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

しかし、これは2番目の関数を呼び出すときにのみ機能します。関数をチェーンしようとしましたが、これにより、設定された数の関数しか実行できません。

同じ関数に何らかのコールバックを適用する方法はありますか?

注:: 関数はクラスを追加するだけです。

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パターンを使用してこの問題を解決する必要があると思いますplsは以下の擬似コードを参照してください

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 に答える