【发布时间】:2016-12-31 01:24:00
【问题描述】:
我已经阅读了 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 哎呀
doThat()定义。固定
标签: javascript multithreading asynchronous