当前位置:首页 > 技术分析 > 正文内容

ES6学习(17):彻底搞懂 async 和 await,轻松掌握异步编程!

ruisui884个月前 (02-14)技术分析22

在现代 JavaScript 开发中,异步编程已经成为不可或缺的部分。从传统的回调函数到 Promise,再到 ES6 带来的 async 和 await,异步编程变得越来越便捷。今天我们将详细探讨 ES6 中的 async 和 await,让你彻底掌握这种高效简洁的异步编程方式。


一、async 和 await 的简要介绍

async 和 await 是 ES2017(也称为 ES8)引入的新特性,用于简化基于 Promise 的异步代码。async 关键字用于声明一个函数是异步的,await 关键字用于等待一个 Promise 的解决。

  • async:声明异步函数,并自动将该函数的返回值封装成一个 Promise。
  • await:暂停异步函数的执行,直到 Promise 解决,然后返回该 Promise 的解决结果。

二、为什么选择 async 和 await?

传统的异步处理方法(如回调函数和 Promise 链式调用)虽然可以工作,但它们常常会造成代码嵌套、难以阅读和调试。async 和 await 通过引入同步的书写方式,使异步代码看起来更简洁、更易读,从而大大提高了代码的可维护性。

三、代码详细说明

让我们通过一些实际代码示例,逐步了解 async 和 await 的用法:

例子1:基本使用

首先,我们来看一个使用 Promise 的例子:

// 模拟异步操作
function fetchData() {
    return new Promise((resolve) => {
        setTimeout(() => {
            resolve("数据加载完成!");
        }, 2000);
    });
}

// 使用 Promise 处理异步
fetchData().then((data) => {
    console.log(data); // 输出:数据加载完成!
});

使用 async 和 await 重写上述代码:

// 声明异步函数
async function getData() {
    const data = await fetchData();
    console.log(data); // 输出:数据加载完成!
}

getData();

例子2:处理错误

在处理异步操作时,错误处理非常重要。我们可以使用 try...catch 语句来处理 async 函数中的错误:

function fetchDataWithError() {
    return new Promise((_, reject) => {
        setTimeout(() => {
            reject("数据加载失败!");
        }, 2000);
    });
}

async function getDataWithErrorHandling() {
    try {
        const data = await fetchDataWithError();
        console.log(data);
    } catch (error) {
        console.error(error); // 输出:数据加载失败!
    }
}

getDataWithErrorHandling();

例子3:多个异步操作

如果有多个异步操作需要依次执行,可以使用 await 实现顺序执行:

function fetchData1() {
    return new Promise((resolve) => {
        setTimeout(() => {
            resolve("数据1加载完成!");
        }, 1000);
    });
}

function fetchData2() {
    return new Promise((resolve) => {
        setTimeout(() => {
            resolve("数据2加载完成!");
        }, 2000);
    });
}

async function getMultipleData() {
    const data1 = await fetchData1();
    console.log(data1); // 输出:数据1加载完成!

    const data2 = await fetchData2();
    console.log(data2); // 输出:数据2加载完成!
}

getMultipleData();

例子4:并行执行多个异步操作

有时我们希望并行执行多个异步操作,而不是依次执行,这时可以使用 Promise.all:

async function getMultipleDataInParallel() {
    const [data1, data2] = await Promise.all([fetchData1(), fetchData2()]);
    console.log(data1); // 输出:数据1加载完成!
    console.log(data2); // 输出:数据2加载完成!
}

getMultipleDataInParallel();

四、小结

async 和 await 是简化异步编程的强大工具,使得代码更易读,逻辑更清晰。通过本文的代码示例,你可以看到如何在实际项目中应用它们:

  • 使用 async 关键字声明异步函数。
  • 使用 await 在异步函数中暂停执行直到 Promise 解决。
  • 使用 try...catch 处理异步函数中的错误。
  • 按需选择顺序执行和并行执行多个异步操作。

掌握 async 和 await,不仅能提高你的开发效率,还能让你的代码更具可读性和可维护性。希望今天的学习让你对 async 和 await 有了更深的理解和应用信心!觉得有用的话,记得点个赞分享给你的朋友哦??!

更多 JavaScript 高效编程技巧,关注我们,不错过每一篇精彩内容!?

扫描二维码推送至手机访问。

版权声明:本文由ruisui88发布,如需转载请注明出处。

本文链接:http://www.ruisui88.com/post/1964.html

标签: aysnc
分享给朋友:

“ES6学习(17):彻底搞懂 async 和 await,轻松掌握异步编程!” 的相关文章

「2022」打算跳槽涨薪,必问面试题及答案——VUE篇

1、为什么选择VUE,解决了什么问题?vue.js 正如官网所说的,是一套构建用户界面的渐进式框架。与其它重量级框架不同的是,vue 被设计为可以自底向上逐层应用。vue 的核心库只关注视图层,不仅易于上手,还便于与第三方库或既有项目整合。另外一方面,当与现代化工具链以及各种支持类库结合使用时,vu...

迁移GIT仓库并带有历史提交记录

迁移git仓库开发在很多时候,会遇到一个问题。GIT仓库的管理,特别是仓库的迁移。我需要保留已有的历史记录,而不是重新开发,重头再来。我们可以这样做:使用--mirror模式会把本地的分支都克隆。// 先用--bare克隆裸仓库 git clone git@gitee.com:xxx/testApp...

vue 异步更新那点事儿 #web前端

异步更新那点事儿。wue & vueuse官方团队成员。看一下群友投稿的问题。什么问题?就是它这边有一个组件,这个组件里面有个userID,然后这个userID通过props传给了子组件,子组件是userinfo,它里面是用来渲染用户信息的。渲染用户信息的同时,userinfo这个组件又暴露...

微信企业号首款永久免费应用问世

7月14日,微信企业号移动办公应用领跑者——办公逸宣布:其所研发的微信办公应用将永久免费,企事业单位只要拥有微信企业号都可以免费安装办公逸各项应用,此举标志着微信办公免费时代现已到来!据悉,办公逸(www.bangongyi.com)现已推出四大微信办公套件,分别为:移动办公管理套件、客户关系管理套...

微信开发的五大价值应用

企业形象展示微网站是企业在移动互联网时代完美展示企业及品牌形象的最佳选择,表现内容丰富、实时更新、形式多样化,保证品牌形象的有效传播!微网站带来的轻营销模式,更适应现代网站的发展模式,所以微网站的开发也具有更好的商业营销效果,其面对的受众是7亿多的微信用户,蕴含着无限的商机。将企业微网站植入微信公众...

什么是同步通信?什么是异步通信?它们有什么区别?

串行通信一般又分为同步和异步通信,同步通信需要同步时钟信号,而异步通信则不需要同步时钟信号。同步通信:发送方发出数据后,等接收方发回响应以后才发下一个数据包的通讯方式。异步通信:发送方发出数据后,不等接收方发回响应,接着发送下个数据包的通讯方式。同步通信与异步通信有什么区别呢?1、同步通信要求接收端...