Mau*_*ähä 1 javascript ajax callback node.js 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();
Run Code Online (Sandbox Code Playgroud)
这将输出:
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
Run Code Online (Sandbox Code Playgroud)
显然最后两行是太多了......我想要的是在下面的方案中做回调的正确方法..我试过:
if (true) {
console.log("Second interval ended.. GOOD");
return callback(true);
}
Run Code Online (Sandbox Code Playgroud)
哪个有效,并且:
if (true) {
console.log("Second interval ended.. GOOD");
return function() {
callback(true);
}
}
Run Code Online (Sandbox Code Playgroud)
哪个也有效,但他们两个对我来说都是错误的解决方案..如何正确地做到这一点?谢谢!
这可能是一个意见问题,但return callback()通常是标准.您可以在Node源中看到它以这种方式使用.来自filesystem模块的示例:
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();
});
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
1473 次 |
| 最近记录: |