3M汽车膜社区 - 汽车膜社区,玻璃膜,隔热膜,太阳膜,防爆膜,改色膜,漆面保护膜

 找回密码
 立即注册
查看: 108|回复: 0

[问答交流] JavaScript 中的流程控制:回调、Promise、异步/等待

[复制链接]

1

主题

1

帖子

5

积分

新手上路

Rank: 1

积分
5
发表于 2024-1-13 12:36:04 | 显示全部楼层 |阅读模式
在本文中,我们将深入了解如何在 JavaScript 中使用异步代码。我们将从回调开始,继续到承诺,然后以更现代的async/await. 每个部分都将提供示例代码,概述需要注意的要点,并链接到更深入的资源。 Skip 10s 内容: 单线程处理 通过回调实现异步 回调地狱 承诺 异步链接 充满希望的未来? 异步/等待 承诺,承诺 尝试/捕捉丑陋 JavaScript 之旅 JavaScript 通常被认为是异步的。这意味着什么?它如何影响发展?近年来这种方法有何变化? 考虑以下代码: result1 = 大多数语言同步处理每一行。第一行运行并返回结果。第一行完成后,第二行就会运行——无论需要多长时间。


单线程处理 JavaScript 在单个处理线程上运行。当在浏览器选项   电话号码数据库 卡中执行时,其他一切都会停止。这是必要的,因为对页面 DOM 的更改不能在并行线程上发生;如果一个线程重定向到不同的 URL,而另一个线程尝试附加子节点,这将是危险的。 这对于用户来说很少是明显的,因为处理以小块的形式快速发生。例如,JavaScript 检测按钮单击、运行计算并更新 DOM。一旦完成,浏览器就可以自由地处理队列中的下一个项目。 (旁注:其他语言(例如 PHP)也使用单线程,但可能由多线程服务器(例如 Apache)管理。同时对同一 PHP 页面的两个请求可以启动运行 PHP 运行时的独立实例的两个线程.) 通过回调实现异步 单线程会产生问题。



当 JavaScript 调用“慢”进程(例如浏览器中的 Ajax 请求或服务器上的数据库操作)时会发生什么?该操作可能需要几秒钟甚至几分钟。浏览器在等待响应时会被锁定。在服务器上,Node.js 应用程序将无法处理进一步的用户请求。 解决方案是异步处理。当结果准备好时,进程被告知调用另一个函数,而不是等待完成。这称为回调,它作为参数传递给任何异步函数。 例如:并不重要doSomethingAsync;我们所知道的是,它将callback1在未来的某个时候执行。控制台将显示: finished doSomethingAsync complete 您可以在《回归基础:JavaScript 中的回调是什么?》中阅读有关回调的更多信息。 回调地狱 通常,回调仅由一个异步函数调用。因此可以使用简洁的匿名内联函数:不幸的是,这引入了回调地狱——一个臭名昭著的概念,甚至有自己的网页!代码很难阅读,并且当添加错误处理逻辑时会变得更糟。 回调地狱在客户端编码中相对较少。

回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

Archiver|手机版|小黑屋|3M汽车膜社区

Copyright © 2012-2021 3M汽车膜社区. All Rights Reserved.