JavaScript:回调,不会停止执行下面的行
JavaScript: Callback which doesn't stop execution of lines below
在这个问题之前,我已经以为我已经掌握了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
语句,则不会发生任何事情:您的函数只会返回。
相关文章:
- 如何在`window.open`之后执行回调
- 带有Spring的$.getJSON未执行回调
- TypeError:执行回调时,回调不是函数
- Google API 的客户端库不会执行回调
- 调用消费方法后,如何在分配回调时执行回调
- 仅在堆栈中的最后一个执行回调
- 在组合框筛选后执行回调网格视图
- 在循环完成 nodejs 请求之前执行回调
- 通过AjaxForm提交图像并执行回调
- 无法在模块中执行回调,使用 Node-Cron导出对象
- 使用递归函数按顺序执行多个 ajax 请求,并在所有请求完成后执行回调函数
- 如何从对象构造函数执行回调
- 在 modernizr/yepnope 加载完所有文件后执行回调
- 在节点中执行回调
- Javascript 数组映射“出现”以对缺少的元素执行回调
- 如何在调用它的函数结束时执行回调
- 对多个元素执行回调函数
- JavaScript原生Promise对两个结果执行回调
- jquery中未执行回调函数
- 如何在循环中的所有AJAX请求完成后执行回调