我正在阅读有关回调的javascript的各种教程,但它们并没有说明一个基本原则。我理解的是,当使用回调调用函数时,这使得可以等待执行某些代码,然后执行回调函数。所以
// function definition
do_func(int num, callback)
{
Console.log(num);
..
..
callback();
}
//call the function
do_func(123, function(){
Console.log("Running callback");
});
因此,在执行do_func期间,执行所有代码行,然后执行callback()。但是,如果我们的功能改为
// function definition
do_func(int num, callback)
{
read file...
..
..
callback();
}
然后在读取文件时调用回调。所以我们的目的被打败了。这里发生了什么?
非常感谢!
答案 0 :(得分:2)
JavaScript本身是同步和单线程的。你不能写一个异步函数。
您可以使用环境提供的一些API(Node.js,Web浏览器),它们允许您安排异步任务...超时,ajax,FileAPI等等。
使用setTimeout的示例(由HTML Timing API提供):
window.setTimeout(function() {
console.log("World");
}, 1000);
console.log("Hello");
What is a simple example of an asynchronous javascript function?
答案 1 :(得分:0)
do_func(int num, callback)
{
readFile(... , callback);
}
我希望你的readFile函数也可以进行回调,所以你可以直接传递它,直到文件被读取为止。
答案 2 :(得分:0)
你是正确的,在你的例子中,将立即调用callback()而不等待文件加载。在JavaScript中,只要遇到异步,您通常可以监听事件以了解何时运行回调函数。
加载图片的示例:
var img = new Image();
img.addEventListener('load', callback); //add your listener first because if you ran the next line first it might load before your listener is setup
img.src = "fileondisk.jpg";