我读过Why do I have to use await for a method to run asynchronously. What if I don't want to wait for the method to finish before continuing?和Are callbacks always asynchronous?,我仍然试图了解何时回调实际上是异步的。为什么回调被认为是异步的,如果我们需要等待
例如,doThat
在做任何事情之前都需要等待GET
数据。正如上面的第二个链接所述,javascript是单线程的。
doThis(doThat);
function doThis(callback) {
$.get('http://some_api/some_resource', function (data) {
callback(data);
});
};
function doThat(data) {
// Do something with data
};
只有我见过真正的异步功能与承诺,并承诺多在那里我可以,例如,当动画结束了加载其他数据。我希望能够帮助我们更好地理解传统回调是否实际上是异步的。具体的例子帮助。
“回调”实际上只是一个函数,您将其作为参数传递给另一个函数,以便其他函数可以调用它,这个进程* *可以*都是同步的 - 它实际上取决于其他函数功能在做。但即使在像Ajax这样的异步情况下,它不是异步的回调函数本身,它最终会调用它是异步的。在你的例子中,'doThat()'不会等待 - 它是等待调用'doThat()'的其他代码(你的'doThat()'定义也是无效的)。 – nnnnnn
你可能想看看[所有的javascript回调是异步的吗?如果不是,我怎么知道哪些是?](http://stackoverflow.com/q/19083357/1048572)的一般问题和[什么是异步JavaScript函数的简单示例?](http:// stackoverflow.com/q/13806695/1048572)例如 – Bergi
也许这有帮助吗? http://stackoverflow.com/questions/21607692/understanding-the-event-loop – ecarrizo