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

async/await用法详解_async await解决了什么问题

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

asyncawait 是 JavaScript 中处理异步操作的新方法,它们使得异步代码的编写和同步代码一样直观易懂。以下是 asyncawait 的用法详解:

async

async 关键字用于声明一个函数是异步的,这意味着该函数会返回一个 Promise 对象。如果函数正常执行结束,则 Promise 会以 resolve 方式解析;如果函数中抛出错误,则 Promise 会以 reject 方式解析。

声明一个异步函数

// 声明异步函数
async function asyncFunction() {
  // 异步操作
}

在异步函数中,你可以使用 await 关键字等待一个 Promise 解析完成。

异步函数返回值

// 返回一个Promise
async function asyncFunction() {
  return 'Hello World';
}

asyncFunction().then(value => {
  console.log(value); // 输出:Hello World
});

如果异步函数中没有使用 await,则函数的行为和使用 .then.catch 处理 Promise 没有区别。

await

await 关键字只能在 async 函数内部使用,它用于等待一个 Promise 解析完成。await 会暂停函数的执行,直到等待的 Promise 被解决(resolved)或被拒绝(rejected)。

基本用法

async function asyncFunction() {
  const result = await Promise.resolve('Hello World');
  console.log(result); // 输出:Hello World
}

如果 Promise 被拒绝,await 会抛出一个错误,你可以用 try...catch 语句捕获这个错误。

错误处理

async function asyncFunction() {
  try {
    const result = await Promise.reject('Error occurred');
  } catch (error) {
    console.error(error); // 输出:Error occurred
  }
}

并发处理多个异步操作

await 可以并发处理多个异步操作,而不是顺序执行。

async function asyncFunction() {
  const promise1 = Promise.resolve('First');
  const promise2 = Promise.resolve('Second');

  // 并发执行
  const result1 = await promise1;
  const result2 = await promise2;

  console.log(result1, result2); // 输出:First Second
}

异步迭代器

async 还可以和 for...await...of 一起使用,用于异步迭代器。

async function asyncFunction() {
  async function* asyncGenerator() {
    yield Promise.resolve('First');
    yield Promise.resolve('Second');
  }

  for await (const value of asyncGenerator()) {
    console.log(value); // 输出:First 和 Second
  }
}

注意事项

  1. await 只能在 async 函数内部使用。
  2. await 后面必须跟一个 Promise 对象,否则会抛出错误。
  3. 使用 await 时,如果 Promise 被拒绝,会抛出错误,需要用 try...catch 捕获。
  4. async 函数总是返回一个 Promise,即使函数中没有 await 表达式。

asyncawait 的引入使得异步代码的编写更加直观和易于管理,它们已经成为现代JavaScript异步编程的标准工具。

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

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

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

标签: aysnc
分享给朋友:

“async/await用法详解_async await解决了什么问题” 的相关文章

VIM配置整理

一、基本配色set number set showcmd set incsearch set expandtab set showcmd set history=400 set autoread set ffs=unix,mac,dos set hlsearch set shiftwidth=2 s...

vue-router是如何解析query参数呢? #前端

vue-router 中的 query 解析。1. 大家好,我是龙仔。今天来分享 vue-router 是如何解析快乐参数的,因为使用 vue 路由会传 query 参数和快乐参数,所以从 vue 的角度来看如何解析传递的快乐参数。2. 基础知识大家应知道,快乐参数结构如:a、b、c、a、b、c、a...

vue3使用vue-router路由(路由懒加载、路由传参)

vue-router 是 vue的一个插件库1. 专门用来实现一个SPA单页面应用2 .基于vue的项目基本都会用到此库SPA的理解1) 单页Web应用(single page web application,SPA)2) 整个应用只有一个完整的页面3) 点击页面中的链接不会刷新页面, 本身也不会向...

突发!微信全面封禁字节跳动旗下办公产品飞书

日前,字节跳动旗下办公套件飞书发布官方公告称,飞书相关域名无故被微信全面封禁,并且被单方面关闭微信分享API接口。和讯科技对此进行了尝试,发现“feishu”相关域名链接在微信内均无法打开,显示“如需浏览,请长按网址复制后使用浏览器访问”,而在飞书内也无法直接跳转微信分享,显示“未获得分享权限”。据...

详解编程中的同步和异步

本文主要总结一些自己对异步的理解,话不多说 下面开始。一. 单线程 我们常说“JavaScript是单线程的”,所谓单线程,是指在JS引擎中负责解释和执行JavaScript代码的线程只有一个。不妨叫它主线程 但是实际上还存在其他的线程。例如:处理AJAX请求的线程、处理DOM事件的线程、定时器线程...

每日分享- Vue 3.0 + vite + axios 出现跨域问题如何解决

在 Vue 3.0 + Vite + Axios 中,如果接口请求的地址与前端代码不在同一域下,就会出现跨域问题。这种情况下,可以采取以下几种简单的解决办法:一 使用代理在 Vite 的配置文件中,可以通过 proxy 选项来配置代理,使得前端代码与接口请求在同一域下。例如:// vite.conf...