一个接一个地运行一个函数:回调问题

时间:2014-05-04 14:41:43

标签: javascript

我试图理解为什么函数lazy_2不会以这种方式运行:

function lazy_1 (callback) {
    alert('lazy_1');
}

function lazy_2 () {
    alert('lazy_2');   
}

lazy_1(lazy_2);

? (通过Execute jquery function after another function completes。)

jQuery方法效果很好:

function lazy_1 (callback) {
    alert('lazy_1');
}

function lazy_2 () {
    alert('lazy_2');   
}

$.when( lazy_1() ).done(function() {
    lazy_2();
});

http://jsfiddle.net/5LL69/

2 个答案:

答案 0 :(得分:4)

因为lazy_1()没有调用它的回调 - 事实上没有人这样做。对于要调用的回调,它需要看起来像这样:

function lazy_1 (callback) {
    alert('lazy_1');
    callback();
}

function lazy_2 () {
    alert('lazy_2');   
}

lazy_1(lazy_2);

上面的第二个代码块相当于:

lazy1();
lazy2();

因为您只是要求jQuery $.when()运行一个函数,然后另一个函数没有任何承诺(所有同步代码)。

答案 1 :(得分:2)

您必须实际拨打callback

function lazy_1 (callback) {
    alert('lazy_1');
    callback();
}

function lazy_2 () {
    alert('lazy_2');   
}

lazy_1(lazy_2);