JavaScript:回调,不使用';不要停止执行下面的行

JavaScript:回调,不使用';不要停止执行下面的行,javascript,ajax,node.js,callback,requirejs,Javascript,Ajax,Node.js,Callback,Requirejs,在提出这个问题之前,我已经认为我已经掌握了JavaScript。。但不,甚至不接近:) 我目前正在使用require.js编程,并尝试使用回调生成方法(因为使用了async js),但问题是代码在我的callback()之后继续执行呼叫 请参见以下示例: var Second = function () { console.log("Second init"); }; Second.prototype.load = function (callback) { console.

在提出这个问题之前,我已经认为我已经掌握了JavaScript。。但不,甚至不接近:)

我目前正在使用require.js编程,并尝试使用回调生成方法(因为使用了async 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);
    }
}

这也行,但对我来说,这两种方法都是错误的。。如何正确执行此操作?谢谢

这可能是一个意见问题,但
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();
});

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

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
语句,则不会发生任何事情:函数只会返回

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

好的,太好了:)-只是感觉有点荒谬,我认为尝试“return callback();”-这是我自己的愚蠢发明-如果没有更多关于这个主题的意见,我很快就会接受,thnx!据我所知,没有任何官方文档(尽管您可以将官方节点源作为如何使用的一个良好指标)。但是,
return
要么用于提供结果值,要么用于中断函数。为返回值创建一个新的作用域没有任何效果,所以你可以假设
return callback()
是实现你要求的最好的方法。现在我修改了我的源代码来使用它,它看起来并没有那么糟糕,我使用它。好吧,太好了:)-这感觉有点荒谬,我认为尝试“return callback()是我自己的愚蠢发明如果对这个问题没有更多的意见,我会很快接受的,thnx!据我所知,没有任何官方文档(尽管您可以将官方节点源作为如何使用的一个良好指标)。但是,
return
要么用于提供结果值,要么用于中断函数。为返回值创建一个新的作用域没有任何效果,因此您可以假设
return callback()
是实现您的要求的最佳方法。既然我修改了源代码以使用它,它看起来并没有那么糟糕,我就这样做了。那么您如何编写问题案例的代码。。如果我在下面有50行代码,在值为false时执行其他操作,该怎么办?我可以这样做,如果其他块,并让代码继续回调,但我认为它是丑陋的代码。什么是错误的<代码>如果(某物){CalbAudio();}{ /*做其他的*/}。回调没有什么神奇之处——它只是一个函数。对不起,我只是觉得这里没有问题。这个问题与“if-else”编程风格无关,而是关于正确回调的行为。我使用了if(condition){return something;}/*不带块地做其他事情*/返回某物;由于回调中断,现在停止的时间太长;)那么你是如何编写问题案例的。。如果我在下面有50行代码,在值为false时执行其他操作,该怎么办?我可以这样做,如果其他块,并让代码继续回调,但我认为它是丑陋的代码。什么是错误的<代码>如果(某物){CalbAudio();}{ /*做其他的*/}。回调没有什么神奇之处——它只是一个函数。对不起,我只是觉得这里没有问题。这个问题与“if-else”编程风格无关,而是关于正确回调的行为。我使用了if(condition){return something;}/*不带块地做其他事情*/返回某物;由于回调中断,现在停止的时间太长;)