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

JavaScript: Callback which doesn't stop execution of lines below

本文关键字:执行 回调 JavaScript      更新时间:2023-09-26

在这个问题之前,我已经以为我已经掌握了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

显然最后两行太多了...我不想要的是以下情况下进行回调的正确方法n..我试过了:

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

哪个有效,并且:

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

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

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

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();
});

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