《智能前端技术与实践》——第 2 章 前端开发基础 ——2.6 深度学习中的 JavaScript——2.6.2 JavaScript 异步编程(上)

简介: 《智能前端技术与实践》——第 2 章 前端开发基础 ——2.6 深度学习中的 JavaScript——2.6.2 JavaScript 异步编程(上)

2.async/await 函数


async 函数是使用 async 关键字声明的函数,是 AsyncFunction 构造函数的实例,并且允许 使用 await 关键字。async 和 await 关键字让我们可以用一种更简洁的方式写出基于 Promise 的 异步行为,而无须刻意地链式调用 Promise。


async 函数可能包含 0 个或多个 await 表达式,await 表达式会暂停整个 async 函数的执行 进程并让出其控制权,只有当等待的基于 Promise 对象的异步操作成功或失败后才会恢复进程。 示例代码如代码清单 2-26 所示。


代码清单 2-26


functionresolveAfter2Seconds() {
returnnewPromise(resolve=> {
setTimeout(() => {
resolve('resolved');
}, 2000);
});
}
asyncfunctionasyncCall() {
console.log('calling');
constresult=awaitresolveAfter2Seconds();
console.log(result);
console.log("hahaCoder")
// 期望输出: "resolved"}
asyncCall();

运行结果如下。


"calling""resolved""hahaCoder"


代码清单 2-26 首先会输出 calling 字符串,接着会执行 resolveAfter2Seconds()函数,由于 该函数前有 await 关键字,故 asyncCall 函数的执行进程会中断,2s 后,即异步操作执行完成 后会恢复进程,从而输出 resolved 和 hahaCoder。


不论是回调函数、Promise 还是 async/await 等其他异步任务解决方案,其本质都是通过 JavaScript 唯一的单线程执行所有任务。


本节最后介绍 HTML5 中新提出的概念——Web Worker,它可以帮助 JavaScript 创建多线 程环境,即允许主线程创建 worker 线程,并将一些任务分配给 worker 线程。


Web Worker 为 Web 内容在后台线程中运行脚本提供了一种简单的解决方法。worker 线程 可以执行任务而不干扰用户界面,等到 worker 线程完成对应的计算任务,将结果返回主线程。 示例代码如代码清单 2-27 所示。


代码清单 2-27


<!DOCTYPE html><htmllang="en"><head><metacharset="UTF-8"><title>web worker</title></head><body><script>varworker=newWorker("worker.js")
worker.onmessage= (evt) => {
console.log("Message posted from webworker: "+evt.data);
}
worker.postMessage("Hello,I'm hahaCoder from demo.html");
</script></body></html>

Worker.js 中的代码如代码清单 2-28 所示。


代码清单 2-28


postMessage("Hello,I'm shipudong from worker.js");
onmessage= (evt) => {
postMessage("Worker received data: "+evt.data);
};

运行结果如图 2-32 所示。


image.png



《智能前端技术与实践》——第 2 章 前端开发基础 ——2.6 深度学习中的 JavaScript——2.6.2 JavaScript 异步编程(下): https://developer.aliyun.com/article/1228121?groupCode=tech_library


相关文章
|
17天前
|
Web App开发 JavaScript 前端开发
Node.js 是一种基于 Chrome V8 引擎的后端开发技术,以其高效、灵活著称。本文将介绍 Node.js 的基础概念
Node.js 是一种基于 Chrome V8 引擎的后端开发技术,以其高效、灵活著称。本文将介绍 Node.js 的基础概念,包括事件驱动、单线程模型和模块系统;探讨其安装配置、核心模块使用、实战应用如搭建 Web 服务器、文件操作及实时通信;分析项目结构与开发流程,讨论其优势与挑战,并通过案例展示 Node.js 在实际项目中的应用,旨在帮助开发者更好地掌握这一强大工具。
39 1
|
20天前
|
JavaScript 前端开发 程序员
前端原生Js批量修改页面元素属性的2个方法
原生 Js 的 getElementsByClassName 和 querySelectorAll 都能获取批量的页面元素,但是它们之间有些细微的差别,稍不注意,就很容易弄错!
|
17天前
|
JavaScript 前端开发 Java
springboot解决js前端跨域问题,javascript跨域问题解决
本文介绍了如何在Spring Boot项目中编写Filter过滤器以处理跨域问题,并通过一个示例展示了使用JavaScript进行跨域请求的方法。首先,在Spring Boot应用中添加一个实现了`Filter`接口的类,设置响应头允许所有来源的跨域请求。接着,通过一个简单的HTML页面和jQuery发送AJAX请求到指定URL,验证跨域请求是否成功。文中还提供了请求成功的响应数据样例及请求效果截图。
springboot解决js前端跨域问题,javascript跨域问题解决
|
6天前
|
机器学习/深度学习 数据采集 供应链
使用Python实现智能食品消费需求预测的深度学习模型
使用Python实现智能食品消费需求预测的深度学习模型
32 10
|
6天前
|
机器学习/深度学习 传感器 边缘计算
基于深度学习的图像识别技术在自动驾驶中的应用####
随着人工智能技术的飞速发展,深度学习已成为推动自动驾驶技术突破的关键力量之一。本文深入探讨了深度学习算法,特别是卷积神经网络(CNN)在图像识别领域的创新应用,以及这些技术如何被集成到自动驾驶汽车的视觉系统中,实现对复杂道路环境的实时感知与理解,从而提升驾驶的安全性和效率。通过分析当前技术的最前沿进展、面临的挑战及未来趋势,本文旨在为读者提供一个全面而深入的视角,理解深度学习如何塑造自动驾驶的未来。 ####
35 1
|
12天前
|
机器学习/深度学习 数据采集 传感器
基于深度学习的图像识别技术在自动驾驶中的应用研究####
本文旨在探讨深度学习技术,特别是卷积神经网络(CNN)在自动驾驶车辆图像识别领域的应用与进展。通过分析当前自动驾驶技术面临的挑战,详细介绍了深度学习模型如何提升环境感知能力,重点阐述了数据预处理、网络架构设计、训练策略及优化方法,并展望了未来发展趋势。 ####
47 6
|
10天前
|
机器学习/深度学习 算法框架/工具 网络架构
深度学习中的正则化技术及其对模型性能的影响
本文深入探讨了深度学习领域中正则化技术的重要性,通过分析L1、L2以及Dropout等常见正则化方法,揭示了它们如何帮助防止过拟合,提升模型的泛化能力。文章还讨论了正则化在不同类型的神经网络中的应用,并指出了选择合适正则化策略的关键因素。通过实例和代码片段,本文旨在为读者提供关于如何在实际问题中有效应用正则化技术的深刻见解。
|
14天前
|
前端开发 JavaScript 搜索推荐
HTML与CSS在Web组件化中的核心作用及前端技术趋势
本文探讨了HTML与CSS在Web组件化中的核心作用及前端技术趋势。从结构定义、语义化到样式封装与布局控制,两者不仅提升了代码复用率和可维护性,还通过响应式设计、动态样式等技术增强了用户体验。面对兼容性、代码复杂度等挑战,文章提出了相应的解决策略,强调了持续创新的重要性,旨在构建高效、灵活的Web应用。
27 6
|
13天前
|
机器学习/深度学习 人工智能 自然语言处理
深入理解人工智能中的深度学习技术及其最新进展
深入理解人工智能中的深度学习技术及其最新进展
|
19天前
|
前端开发 JavaScript 搜索推荐
前端懒加载:提升页面性能的关键技术
前端懒加载是一种优化网页加载速度的技术,通过延迟加载非首屏内容,减少初始加载时间,提高用户访问体验和页面性能。