前端(十二)——深入理解和使用 async和await

这篇具有很好参考价值的文章主要介绍了前端(十二)——深入理解和使用 async和await。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

前端(十二)——深入理解和使用 async和await,前端,前端,javascript,开发语言

😛博主:小猫娃来啦
😛文章核心:深入理解和使用 async和await

在 JS中,异步操作是无法避免的,而处理异步操作最常用的方法是使用回调函数或者 Promise。然而,自 ES2017 引入了 async/await 之后,我们可以通过更简洁、可读性更好的方式来处理异步代码。本文将从浅层次到深层次,介绍 async/await 的理解和使用。

你可能遇到的问题

声明一个变量,用axios请求后,把请求结果中的数据给这个变量。然后去使用这个变量,发现这个变量里是空的。但是当把这个这串代码放在定时器里几秒后,就能打印到。但如果网络不好,请求花的时间更多,那么你还是打印不到。你遇到过这个情况吗?如何拿到值呢?或者如何等到接口请求完,再去向下执行?

这边牵扯到一个同步和异步的问题,那么axios是异步的非阻塞模式。如何将axios请求由异步变为同步,这就需要asyncawait配合使用。

做到这一点,你才能保证必须让程序按照从上到下的顺序执行,你也就能拿到值了。

async function init() {
  let salesData = [];
  
  const res = await axios({
    method: "post",
    url: "要请求的接口",
    data: {}
  });

}
 console.log(res.data.data);
 salesData = res.data.data;
  

如果你着急解决问题,那么上面的代码示例就已经帮你解决了问题。如果你有时间,要深入了解,那么请往下看:


什么是 async/await

async/await 是基于 Promise 的一种语法糖,它提供了一种更优雅的方式来编写异步代码。通过使用 async 关键字声明一个异步函数,我们可以在其中使用 await 关键字等待 Promise 对象的解决(resolved)或拒绝(rejected),使得代码看起来更像是同步的方式进行编写和阅读。


基本用法

  1. async 声明 使用 async 关键字声明一个异步函数。异步函数内部可以包含 await 表达式。
async function fetchData() {
  // 异步操作
}
  1. await 表达式 在异步函数内部,可以使用 await 关键字等待一个 Promise 对象,并返回其 resolved 的结果。这样,在 await 表达式之后的代码将会等待该 Promise 对象解决,然后继续执行。
async function fetchData() {
  const result = await somePromise; // 等待 Promise 对象执行完毕
  console.log(result); // 输出已解决的结果
}

await后面放axios也是可以的,原因无他。

仅因为axios 是一个基于 Promise 的 HTTP 客户端库,它提供了更丰富、更方便的功能来发送 Ajax 请求和处理响应。而 Promise 则是一种通用的处理异步操作的对象,可以在各种场景下使用,并通过链式调用的方式来处理异步操作的结果。


错误处理

  1. 通过将 await 表达式放在 try-catch 块中,可以捕获异步操作抛出的错误,并进行相应的处理。
async function fetchData() {
  try {
    const result = await somePromise;
    console.log(result);
  } catch (error) {
    console.error(error);
  }
}
  1. 在 async 函数内部,如果需要抛出一个错误并将其封装为 Promise.reject(),可以使用 throw 关键字。
async function fetchData() {
  throw new Error('请求失败');
}

并行执行多个异步操作

  • 若有多个独立的异步操作,我们可以使用 Promise.all() 方法来并行执行它们,并等待所有异步操作都完成后获取结果。
async function fetchMultipleData() {
  const promise1 = fetch(url1);
  const promise2 = fetch(url2);
  
  const [result1, result2] = await Promise.all([promise1, promise2]);
  console.log(result1, result2);
}

async/await 与同步代码混用

  1. 同步代码中使用 await 在一个异步函数内部,我们可以使用 await 关键字来等待异步操作的结果,但是也可以将其用于同步操作,使得代码逻辑更加清晰。
async function doSomething() {
  const result = await syncFunction(); // 等待一个同步函数执行完毕
  console.log(result);
}
  1. async 函数调用 我们可以在同步代码中调用异步函数,虽然这样的调用本身是异步的,但我们可以将它视为一个同步操作,并根据需要等待其结果。
function syncFunction() {
  const result = await asyncFunction(); // 等待一个异步函数执行完毕
  console.log(result);
}

axios 和 Promise 的相同点

  • 异步操作:无论是 Axios 还是 Promise,它们都用于处理异步操作。Axios 通过发送 HTTP 请求和处理响应来实现异步操作,而 Promise 是一种通用的处理异步操作的对象,可以在各种场景下使用。

  • 基于 Promise:Axios 是基于 Promise 的,它返回的是一个 Promise 对象。Promise 提供了一种更优雅、可读性更好的方式来处理异步代码。

  • 错误处理:无论是 Axios 还是 Promise,它们都提供了错误处理的机制。Axios 可以捕获请求错误和响应错误,并将错误信息封装成一个统一的错误对象返回。Promise 通过 reject 状态来表示异步操作失败,并能够使用 .catch() 方法来捕获并处理错误。


总结

当我们遇到需要代码加载顺序必须同步时,也就是执行顺序必须由上而下,等中间代码执行完毕才能向下执行时。
我们需要用async和await来介入,他们的配合使用,可以使异步变为同步,多用于改变接口请求等异步操作。

前端(十二)——深入理解和使用 async和await,前端,前端,javascript,开发语言文章来源地址https://www.toymoban.com/news/detail-652641.html


到了这里,关于前端(十二)——深入理解和使用 async和await的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 深入学习JavaScript系列(七)——Promise async/await generator

    本篇属于本系列第七篇 第一篇:#深入学习JavaScript系列(一)—— ES6中的JS执行上下文 第二篇:# 深入学习JavaScript系列(二)——作用域和作用域链 第三篇:# 深入学习JavaScript系列(三)——this 第四篇:# 深入学习JavaScript系列(四)——JS闭包 第五篇:# 深入学习JavaScrip

    2023年04月08日
    浏览(31)
  • 详解async 与 await,带您理解Playwright使用异步方法的正确姿势!

    大家在使用python做playwright自动化测试的过程中,一定会发现下面这种异步用法 很多同学可能只是按照这种写法来编写项目的自动化测试代码,对于具体细节可能并不了解,今天我就来讲一下playwright异步用法的相关技术细节。建议大家拷贝文档中的脚本实际运行一下,学习的

    2024年02月12日
    浏览(36)
  • uniapp _微信小程序使用async,await(易如反掌的理解清楚)

    async 和 await 是 JavaScript 中处理异步编程的一种方式,它们是 ECMAScript 2017(也被称为 ES8)引入的新特性。 async 用于声明一个函数是异步函数。异步函数在执行时返回一个 Promise 对象。它使得在函数内部可以使用 await 等待异步操作的完成。 await 只能在 as

    2024年03月15日
    浏览(28)
  • async/await 编程理解

    博客参考 Asynchronous Programming in Rust ,并结合其中的例子阐述 async 和 await 的用法,如何使用 async 和 await 是本节的重点。 async 和 await 主要用来写异步代码,async 声明的代码块实现了 Future 特性。如果实现 Future 的代码发生阻塞,会让出当前线程的控制权,允许线程去执行别的

    2024年02月12日
    浏览(29)
  • async/await 的理解和用法

    async放在函数前的一个修饰符,函数会默认返回一个Promise对象的resolve的值 1、await也是一个修饰符, 只能放在async定义的函数内 ,可以理解为 等待 2、await 修饰的是Promise对象: 获取Promise中返回的内容 (resolve或reject的参数), 且取到值后语句才会往下执行; 3、如果不是P

    2024年02月01日
    浏览(26)
  • 彻底理解Promise和async/await

    1.异步行为是 为了优化因计算量大而时间长的操作 . 2.pedding 待定: 表示尚未开始或正在进行中    fulfilled 解决: 表示已经成功完成    rejected 拒绝: 表示没有完成 3.从pedding状态切换到fulfilled状态或rejected状态后,状态就不会再改变.而且也不能保证promise比如会脱离待定状态. 因此

    2024年02月03日
    浏览(36)
  • Promise, Generator, async/await的渐进理解

         作为前端开发者的伙伴们,肯定对Promise,Generator,async/await非常熟悉不过了。Promise绝对是烂记于心,而async/await却让使大伙们感觉到爽(原来异步可以这么简单)。可回头来梳理他们的关联时,你惊讶的发现,他们是如此的密切相关。       我对他们三者之间的关联

    2024年02月08日
    浏览(29)
  • 【前端】浅谈async/await异步传染性

    \\\"异步传染性\\\"问题通常是指,当一个函数使用了async和await,其调用者也需要使用async和await处理异步操作,导致整个调用链都变成异步的。这种情况可能导致代码变得更复杂,不易维护。 类似于C# try catch的层层上抛,在某一层catch 查了很多资料 ,对于这个问题说法还都不一样

    2024年01月23日
    浏览(32)
  • 前端面试:【异步编程】Callback、Promise和Async/Await

    嗨,亲爱的JavaScript探险家!在JavaScript开发的旅程中,你会经常遇到异步编程的需求。为了处理异步操作,JavaScript提供了多种机制,包括Callbacks、Promises和Async/Await。本文将深入介绍这些机制,让你能够更好地处理异步任务。 1. Callbacks:传统的异步方式 Callbacks是JavaScript中最早

    2024年02月11日
    浏览(32)
  • 前端异步编程全套:xmlhttprequest > ajax > promise > async/await

    同步与异步区别 同步:按顺序,依次执行,向服务器发送请求--客户端做其他操作 异步:分别执行,向服务器发送请求==同时执行其他操作 原生xmlhttprequest 四步骤 创建ajax对象 设定数据的传输方式(get、post),打开连接open() 获得响应数据 属性 描述 onreadystatechange 当readysta

    2024年02月01日
    浏览(33)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包