如果需要等待,为什么回调被认为是异步的

咆哮者

我已经读过为什么我必须使用await来异步运行方法。如果我不想等待方法完成再继续怎么办?回调总是异步的吗?并且仍在尝试了解回调实际上是异步的。

例如,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
};

我所见过的唯一真正的异步功能是使用诺言和多个诺言,例如,我可以在动画包装时加载其他数据。我想帮助您更好地了解传统回调实际上是异步的。具体的例子会有所帮助。

slebetman

例如,我可以在动画结束时加载其他数据。

这正是您可以使用代码执行的操作。请注意,在等待doThat执行时,您可以运行其他代码(而“运行其他代码”确实会使人们感到困惑)就像您的动画示例一样:

function doThis(callback) {
    $.get('http://some_api/some_resource', function (data) {
        callback(data);
    });
};

function doThat(function (data) {
    // Do something with data
});

function doAnotherThing(function (data) {
    // Do something with data
});

doThis(doThat);

// without waiting for doThat to run, you can IMMEDIATELY call:
doThis(doAnotherThing);

// without waiting for either doThat or doAnotherThing you
// can output some pretty animations:
setInterval(do_animation,100);

// and without waiting for any of the above you can do anything else:
document.body.innerHTML += 'hello';

请注意,令大多数人感到困惑的是,该document.body.innerHTML='hello'部分其上方的任何代码之前都已运行这意味着回调是异步的,因为它们是在数据到达执行的,而不是在调用函数时执行的

请注意,并非所有的回调都是异步的。例如,Array.prototype.forEach()是同步的:

document.body.innerHTML += 'before<br>';
['hello','world'].forEach(function(x){
    document.body.innerHTML += x;
})
document.body.innerHTML += '<br>after';

决定回调是异步还是同步的是调用它的函数。另请参阅:我知道回调函数是异步运行的,但是为什么呢?

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

如果需要等待,为什么回调被认为是异步的

来自分类Dev

为什么aiohttp响应的json()方法需要等待?

来自分类Dev

异步回调并等待

来自分类Dev

异步调用完成后,回调/关闭如何知道要等待?

来自分类Dev

如果需要等待连接,是否应该执行主要异步操作?

来自分类Dev

为什么使用exit()被认为是不好的?

来自分类Dev

为什么Clock()被认为是坏的?

来自分类Dev

为什么令牌被认为是无状态的?

来自分类Dev

为什么“ hdparm -w”被认为是危险的?

来自分类Dev

为什么 RMSProp 被认为是“泄漏的”?

来自分类Dev

为什么需要使用 promise 作为异步回调的包装器

来自分类Dev

量角器,完成并期望,为什么我们需要等待?

来自分类Dev

从Ubuntu 16.04升级到18.04.1:为什么需要等待几天?

来自分类Dev

在异步生成器函数中是否需要等待?

来自分类Dev

是否需要等待异步写入单个文件?

来自分类Dev

当我需要等待事件时如何使方法异步

来自分类Dev

为什么我应该等待response.read(),但是我不需要等待response.status?

来自分类Dev

为什么程序要等待schedule()完成,而不等待scheduleWithFixedDelay()?

来自分类Dev

从浏览器上下文调用AssumeRole API是否被认为是Auth *反模式?如果是,为什么?

来自分类Dev

为什么在java中,如果“*”在命令行编译中的main方法main的参数中给出,这被认为是“a”

来自分类Dev

在Android的IntentService中等待异步回调

来自分类Dev

节点脚本等待异步回调

来自分类Dev

在BeginReceive回调中进行异步/等待

来自分类Dev

不等待模拟对象的异步回调

来自分类Dev

Javascript异步/等待回调函数

来自分类Dev

等待异步方法中的回调被调用

来自分类Dev

为什么Nullable <T>被认为是结构而不是类?

来自分类Dev

为什么Hadoop被认为是I / O密集型的?

来自分类Dev

为什么邪恶合并被认为是有害的?

Related 相关文章

  1. 1

    如果需要等待,为什么回调被认为是异步的

  2. 2

    为什么aiohttp响应的json()方法需要等待?

  3. 3

    异步回调并等待

  4. 4

    异步调用完成后,回调/关闭如何知道要等待?

  5. 5

    如果需要等待连接,是否应该执行主要异步操作?

  6. 6

    为什么使用exit()被认为是不好的?

  7. 7

    为什么Clock()被认为是坏的?

  8. 8

    为什么令牌被认为是无状态的?

  9. 9

    为什么“ hdparm -w”被认为是危险的?

  10. 10

    为什么 RMSProp 被认为是“泄漏的”?

  11. 11

    为什么需要使用 promise 作为异步回调的包装器

  12. 12

    量角器,完成并期望,为什么我们需要等待?

  13. 13

    从Ubuntu 16.04升级到18.04.1:为什么需要等待几天?

  14. 14

    在异步生成器函数中是否需要等待?

  15. 15

    是否需要等待异步写入单个文件?

  16. 16

    当我需要等待事件时如何使方法异步

  17. 17

    为什么我应该等待response.read(),但是我不需要等待response.status?

  18. 18

    为什么程序要等待schedule()完成,而不等待scheduleWithFixedDelay()?

  19. 19

    从浏览器上下文调用AssumeRole API是否被认为是Auth *反模式?如果是,为什么?

  20. 20

    为什么在java中,如果“*”在命令行编译中的main方法main的参数中给出,这被认为是“a”

  21. 21

    在Android的IntentService中等待异步回调

  22. 22

    节点脚本等待异步回调

  23. 23

    在BeginReceive回调中进行异步/等待

  24. 24

    不等待模拟对象的异步回调

  25. 25

    Javascript异步/等待回调函数

  26. 26

    等待异步方法中的回调被调用

  27. 27

    为什么Nullable <T>被认为是结构而不是类?

  28. 28

    为什么Hadoop被认为是I / O密集型的?

  29. 29

    为什么邪恶合并被认为是有害的?

热门标签

归档