0

この投稿でコールバック関数について学んだことを3つの関数に拡張しようとしていますが、動作させるのに問題があります。これらの3つの関数を順番に起動する方法を誰かが理解するのを手伝ってもらえますか?

var yourCallback = function(args, second) {
    var t = setTimeout(function() {
        $('body').append(args);
    }, 800);

    second('3-');


}

var yourSecondCallback = function(args) {
    var t = setTimeout(function() {
        $('body').append(args);
    }, 800);
}

function function1(args, callback, yourSecondCallback) {
    $('body').append(args);
    if (callback) {
        callback('2-');
    }

}


function1('1-' , yourCallback);​

http://jsfiddle.net/loren_hibbard/WfKx2/3/

どうもありがとうございます!

4

5 に答える 5

1

コールバックを順番に呼び出すには、コールバックをネストする必要があります。

var yourCallback = function(args, second) {
    var t = setTimeout(function() {
        $('body').append(args);
        second('3-');
    }, 800);
}

var yourSecondCallback = function(args) {
    var t = setTimeout(function() {
        $('body').append(args);
    }, 800);
}

function function1(args, callback) {
    $('body').append(args);
    if (callback) {
        callback('2-', yourSecondCallback);
    }

}


function1('1-' , yourCallback);​

これがあなたの変更されたフィドルです

于 2012-11-16T18:06:13.410 に答える
0

最初の引数がすべてのコールバックの入力になる場合は、このコードを無制限の引数に使用できます

var yourCallback = function(args, second) {
    var t = setTimeout(function() {
        $('body').append(args + ' first function');
    }, 800);

}

var yourSecondCallback = function(args) {
    var t = setTimeout(function() {
        $('body').append(args + ' second function');
    }, 800);
}

function function1(args) {
    var callbacks = arguments.length - 1;
    for (i = 1; i < arguments.length; i++) {
        if (typeof(arguments[i] == 'function')) {
            arguments[i](arguments[0]);
        }
    }
}


function1('1-', yourCallback, yourSecondCallback);​

フィドル-http://jsfiddle.net/8squF/

于 2012-11-16T18:03:22.653 に答える
0

あなたの関数名は私を混乱させるので、私は簡単なアプローチを示すためにいくつかを作り上げるつもりです:

function1('-1', function(){
    secondCallback(...);
    thirdCallback(...);
    ...
});

そのような単純なアプローチがうまくいかない理由は何ですか?

于 2012-11-16T18:05:51.013 に答える
0

ここで何をしようとしているのか正確にはわかりませんが、これを行う場合function1

callback('2-');

このメソッドを呼び出しています:

var yourCallback = function(args, second)

ただし、の値を指定していないsecondため、エラーが発生します。

于 2012-11-16T18:05:52.793 に答える
0

3つのコールバック関数を呼び出す関数mainMethodがあります。

mainFunction最初のコールバック関数(one)が呼び出され、最初のパラメーターがそれに渡されます。

1つは、2番目のパラメーターを2番目のコールバック関数(2つ)に渡します。

2つは、3番目のパラメーターを最後のコールバック関数(3つ)に渡します。

3つは、渡された最後のパラメーターをログに記録するだけです。

function mainFunction(callback1, callback2, callback3){

      var first_parameter = "ONE"
      callback1(first_parameter);
}


function one(a){

         console.log("one: " + a);
         var second_parameter = "TWO"
         two(second_parameter);
}

function two(b){

         console.log("two: " + b);
         var third_parameter = "THREE";
         three(third_parameter);
}

function three(c){

         console.log("three: " + c);
}


mainFunction(one, two, three);

于 2018-10-14T02:59:19.927 に答える