JavaScript:回调不会停止执行下面的行

时间:2013-09-28 22:14:53

标签: javascript ajax node.js callback requirejs

在这个问题出现之前,我已经认为我已经掌握了JavaScript ......但是没有,甚至没有关闭:)

我目前正在使用require.js进行编程并尝试使用回调创建方法(因为异步js),但问题是代码在 callback(); 调用之后继续执行。

参见以下示例:

var Second = function () {
    console.log("Second init");
};

Second.prototype.load = function (callback) {

    console.log("Second load");

    var timeOut = setTimeout(function () {

        clearTimeout(this);

        if (true) {
            console.log("Second interval ended.. GOOD");
            callback(true);
        }

        console.log("Second interval ended.. NO, YOU SHOULD NOT BE HERE!");
        callback(false);

    }, 1000);
};

var First = function () {

    console.log("First init");
    var second = new Second();

    second.load(function (returned) {
        console.log("Second returned: " + returned);
    });

};

First();

这将输出:

First init
Second init
Second load
Second interval ended.. GOO
Second returned: true
Second interval ended.. NO, YOU SHOULD NOT BE HERE!
Second returned: false

显然最后两行太多了......我想要的是在下面的情节中做回调的正确方法..我试过了:

if (true) {
    console.log("Second interval ended.. GOOD");
    return callback(true);
}

哪个有效,并且:

if (true) {
    console.log("Second interval ended.. GOOD");
    return function() {
       callback(true);
    }
}

哪个也有效,但它们对我来说都是错误的解决方案..如何正确地做到这一点?谢谢!

2 个答案:

答案 0 :(得分:5)

这可能是一个观点问题,但return callback()通常是标准。您可以在Node源中看到它以这种方式使用。文件系统模块的示例:

fs.fstat(fd, function(er, st) {
  if (er) return callback(er);
  size = st.size;
  if (size === 0) {
    // the kernel lies about many files.
    // Go ahead and try to read some bytes.
    buffers = [];
    return read();
  }

  buffer = new Buffer(size);
  read();
});

答案 1 :(得分:0)

如果您不希望在调用回调后执行代码,请不要放置任何代码。如果在调用回调函数后没有放置console.log语句,则不会发生任何事情:您的函数只会返回。