💡异步编程发展历程:从回调地狱到async/await!

简介: 从最初的回调地狱到现代的async/await,逐步介绍不同的异步编程方式,并探讨它们的优势和劣势。通过对比不同的代码示例,我们将看到如何改善异步代码的可读性和可维护性

嗨,大家好!这里是道长王JJ~

今天将深入探索异步编程的前世今生,并揭开从回调地狱到async/await范式的历程。如果你还不认识node,还困惑于复杂的回调嵌套和错误处理,那么将为你带来眼前一亮的解决方案!

准备好了吗?让我们一起探索这个激动人心的异步世界吧!🚀

💡理解异步编程的重要性

在我们踏入异步编程的奇妙旅程之前,让我们先回顾一下异步编程的重要性。

异步编程是现代应用开发中不可或缺的关键概念。它不仅提升了应用的响应速度和用户体验,还为我们处理网络请求、读取文件和执行复杂计算等任务提供了强大的能力。

掌握异步编程,就意味着掌握了开发高效、灵活的应用的关键技巧。而node中原生api是以这样的形式存在的:

fs.readFile('xxx', (err, data) => { });

⛓️从原生 API 到 回调地狱

当我们使用原生提供的api函数作为异步操作的处理方式时,我们常常会陷入回调地狱的困境。

嵌套的回调层级不仅使代码难以阅读和维护,还增加了错误处理的复杂性。

看起来像是这样的:


fs.readFile('file01.json', (err, data) => {
    
    fs.readFile('file02.json', (err, data) => {
    
        fs.readFile('file03.json', (err, data) => {
    
            fs.readFile('file04.json', (err, data) => {
    
                // 处理文件读取结果 
            }); 
        }); 
    }); 
});

😍Promise的崭露头角

幸运的是,随着ES6的引入,Promise成为了解决回调地狱问题的理想方案。

Promise让我们可以以链式调用的方式组织异步操作,使代码更加清晰和易读。

同时,Promise还提供了错误处理机制,使我们能够更好地处理任务执行过程中的异常情况。看起来就像这样:


readFilePromise('file01.json')
    .then(data => {
    
        return readFilePromise('file02.json'); 
    })
    .then(data => {
    
        return readFilePromise('file03.json'); 
    })
    .then(data => {
    
        return readFilePromise('file04.json'); 
    })
    .catch(error => {
    
        console.error('读取文件出错:', error); 
    });

🔐Generator 函数与 co 的诞生

2013 年 6 月, TJ Holowaychuk大神运用 “自动执行器 Thunk 函数 + 自动执行器 Promise 对象” 创建了 co 运行库。

通过使用co库,我们可以按顺序依次执行异步操作,并以同步的方式书写代码了,这与如今的async/await的使用上十分相似。

这种优雅的风格让异步编程变得简洁、直观。看起来是这样的:


co(function* () {
    
    const r1 = yield readFilePromise('file01.json'); 
    const r2 = yield readFilePromise('file02.json'); 
    const r3 = yield readFilePromise('file03.json'); 
    const r4 = yield readFilePromise('file04.json'); 
})
  .catch(error => {
    
      console.error('执行异步操作出错:', error); 
  });

🌟异步和同步的完美结合:async/await

终于, 在es7中引入的asyncawait关键字。

通过将async关键字添加到函数前,我们可以将其默认转换为返回一个Promise对象的函数。

更重要的是,async/await让我们能够以同步的方式书写异步代码,而无需依赖第三方库的支持,使代码更加清晰、易读,为异步编程注入了全新的活力。

就像这样简单明了:


const readFileAsync = async function () {
    
    const f1 = await readFilePromise('file01.json'); 
    const f2 = await readFilePromise('file02.json'); 
    const f3 = await readFilePromise('file03.json'); 
    const f4 = await readFilePromise('file04.json'); 
} catch (error) {
   
    console.error('读取文件出错:', error); 
}

🔑结语

这篇短文仅仅是简要回顾了这四种经典的异步编程方式。

尽管没有深入展开每个细节,但能对它们的本质和为何如此发展有了一点了解。

这是我在掘金尝试的第01篇文章,可能会有理解存在偏差的地方,欢迎指出,共同学习,共同进步。😊

目录
相关文章
|
前端开发 C#
WPF MVVM中在ViewModel中关闭或者打开Window
原文:WPF MVVM中在ViewModel中关闭或者打开Window 这篇博客将介绍在MVVM模式ViewModel中关闭和打开View的方法。 1. ViewModel中关闭View public class MainViewModel { publi...
3681 0
|
Android开发 芯片 开发者
adb 查看安卓手机 CPU 类型(armeabi、armeabi-v7a、arm64-v8a ...)
adb 查看安卓手机 CPU 类型(armeabi、armeabi-v7a、arm64-v8a ...)
2930 0
|
2月前
|
传感器 运维 监控
AR眼镜在工业运维的场景应用和方案说明
AR眼镜通过虚实融合技术,革新工业运维模式。从设备巡检、故障维修到员工培训,AR实现远程协作、实时数据叠加与沉浸式教学,大幅提升效率与准确性,推动智能工厂发展。
|
8月前
|
人工智能 资源调度 自然语言处理
钉钉项目 Teambition AI 能力重塑项目管理100种可能!
钉钉项目Teambition AI迎来重磅升级,通义千问与DeepSeek两大模型助力AI项目管理。从项目规划、任务创建到执行建议、字段管理,再到周报总结和数据分析,Teambition AI贯穿项目全流程,重塑项目管理100种可能。AI技术赋能项目管理智能化,提升团队协作效率,确保项目进度精准把控,让任务分配、资源调度和风险管理更加轻松高效。
钉钉项目 Teambition AI 能力重塑项目管理100种可能!
|
6月前
|
XML JSON 测试技术
如何使用 Postman 发送和测试 WebSocket
WebSocket 促进客户端和服务器之间通过单个持久连接进行实时、双向通信。 需要使用 Postman 建立 WebSocket 连接吗? 请查看我们简洁的循序渐进指南!
|
XML Java 测试技术
Graalvm 替代 JVM 真的可以带来巨大的性能优势吗?
介绍 Spring Boot有助于轻松开发独立的、可用于生产的 Spring 应用程序。它对 Spring 平台和第三方库采用固执己见的方法:以最少的配置简化设置过程。优势: 易于使用:Spring Boot 简化了独立 Spring 应用程序的创建,无需复杂的配置。 嵌入式服务器:它允许直接嵌入 Tomcat、Jetty 或 Undertow 等服务器,从而无需单独部署 WAR 文件。 Starter 依赖项:Spring Boot 提供预配置的“starter”依赖项,降低了构建配置的复杂性。 自动配置:Spring Boot 自动配置 Spring 和第三方库,最大限度地减少手动设置工
|
存储 分布式计算 负载均衡
什么是 HBase?其组件起什么作用?
【8月更文挑战第12天】
1644 4
|
前端开发
【前端web入门第五天】03 清除默认样式与外边距问题【附综合案例产品卡片与新闻列表】
本文档详细介绍了CSS中清除默认样式的方法,包括清除内外边距、列表项目符号等;探讨了外边距的合并与塌陷问题及其解决策略;讲解了行内元素垂直边距的处理技巧;并介绍了圆角与盒子阴影效果的实现方法。最后通过产品卡片和新闻列表两个综合案例,展示了所学知识的实际应用。
295 11
|
自然语言处理 程序员 编译器
`pylatex`是一个Python库,用于生成LaTeX文档。LaTeX是一种用于高质量排版和打印的文档准备系统,特别适用于科学、技术和数学文档。
`pylatex`是一个Python库,用于生成LaTeX文档。LaTeX是一种用于高质量排版和打印的文档准备系统,特别适用于科学、技术和数学文档。
|
关系型数据库 MySQL 持续交付
使用阿里云服务器如何搭建网站?超简单教程!
在阿里云服务器上搭建网站非常简单,尤其是使用轻量应用服务器。只需从应用镜像中选择WordPress镜像,系统将自动安装WordPress及所需环境(PHP、MySQL等)。全过程自动化,无需手动部署。约2-3分钟后,通过服务器公网IP或绑定阿里云域名即可访问和管理网站。详细步骤可参考官方文档。
656 5