0

我正在尝试应用我在这篇文章中学到的关于回调函数的知识,将其扩展到 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

我有一个函数mainMethod,它调用了三个回调函数。

mainFunction将调用第一个回调函数(一个)并将第一个参数传递给它。

一个将第二个参数传递给第二个回调函数(两个)。

将第三个参数传递给最后一个回调函数(三)。

三个将只记录传递给它的最后一个参数。

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 回答