《智能前端技术与实践》——第 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


相关文章
|
19天前
|
JavaScript 前端开发 程序员
前端原生Js批量修改页面元素属性的2个方法
原生 Js 的 getElementsByClassName 和 querySelectorAll 都能获取批量的页面元素,但是它们之间有些细微的差别,稍不注意,就很容易弄错!
|
25天前
|
监控 前端开发 JavaScript
前端工程化和传统前端开发的区别是什么?
前端工程化相比传统前端开发,在开发模式、代码组织与管理、构建与部署流程、团队协作、性能优化以及技术选型等方面都有了显著的改进和提升,能够更好地应对现代前端应用开发的复杂性和高要求。
|
16天前
|
缓存 JavaScript 前端开发
掌握现代JavaScript异步编程:Promises、Async/Await与性能优化
本文深入探讨了现代JavaScript异步编程的核心概念,包括Promises和Async/Await的使用方法、最佳实践及其在性能优化中的应用,通过实例讲解了如何高效地进行异步操作,提高代码质量和应用性能。
|
21天前
|
JavaScript API 开发者
深入理解Node.js中的事件循环和异步编程
【10月更文挑战第41天】本文将通过浅显易懂的语言,带领读者探索Node.js背后的核心机制之一——事件循环。我们将从一个简单的故事开始,逐步揭示事件循环的奥秘,并通过实际代码示例展示如何在Node.js中利用这一特性进行高效的异步编程。无论你是初学者还是有经验的开发者,这篇文章都能让你对Node.js有更深刻的认识。
|
25天前
|
前端开发 JavaScript 开发者
前端小白逆袭记:从零开始,如何快速掌握前端开发精髓?
本文从一个前端小白的视角,分享了快速掌握前端开发核心技能的逆袭之路。通过学习HTML、CSS和JavaScript,逐步接触前端框架如Bootstrap、Vue.js和React,克服挑战,最终实现从入门到精通的蜕变。
25 4
|
1月前
|
前端开发 JavaScript 开发者
除了 async/await 关键字,还有哪些方式可以在 JavaScript 中实现异步编程?
【10月更文挑战第30天】这些异步编程方式在不同的场景和需求下各有优劣,开发者可以根据具体的项目情况选择合适的方式来实现异步编程,以达到高效、可读和易于维护的代码效果。
|
1月前
|
前端开发 JavaScript 开发者
深入理解JavaScript异步编程
【10月更文挑战第29天】 本文将探讨JavaScript中的异步编程,包括回调函数、Promise和async/await的使用。通过实例代码和解释,帮助读者更好地理解和应用这些技术。
28 3
|
1月前
|
设计模式 前端开发 JavaScript
揭秘!前端大牛们如何巧妙利用JavaScript,打造智能交互体验!
【10月更文挑战第30天】前端开发领域充满了无限可能与创意,JavaScript作为核心语言,凭借强大的功能和灵活性,成为打造智能交互体验的重要工具。本文介绍前端大牛如何利用JavaScript实现平滑滚动、复杂动画、实时数据更新和智能表单验证等效果,展示了JavaScript的多样性和强大能力。
46 4
|
1月前
|
机器学习/深度学习 自然语言处理 前端开发
前端神经网络入门:Brain.js - 详细介绍和对比不同的实现 - CNN、RNN、DNN、FFNN -无需准备环境打开浏览器即可测试运行-支持WebGPU加速
本文介绍了如何使用 JavaScript 神经网络库 **Brain.js** 实现不同类型的神经网络,包括前馈神经网络(FFNN)、深度神经网络(DNN)和循环神经网络(RNN)。通过简单的示例和代码,帮助前端开发者快速入门并理解神经网络的基本概念。文章还对比了各类神经网络的特点和适用场景,并简要介绍了卷积神经网络(CNN)的替代方案。
|
1月前
|
前端开发 JavaScript 开发者
除了 Generator 函数,还有哪些 JavaScript 异步编程解决方案?
【10月更文挑战第30天】开发者可以根据具体的项目情况选择合适的方式来处理异步操作,以实现高效、可读和易于维护的代码。