在这个问题出现之前,我已经认为我已经掌握了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);
}
}
哪个也有效,但它们对我来说都是错误的解决方案..如何正确地做到这一点?谢谢!
答案 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
语句,则不会发生任何事情:您的函数只会返回。