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

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

ruisui883个月前 (02-14)技术分析15

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解决了什么问题” 的相关文章

景区游船计时收费管理系统--收费分类版

景区游船计时收费管理系统--收费分类版headerfooter《景区游船计时收费管理系统--收费分类版》是专门旅游景区或度假村开发的一款游船计时收费软件。主要功能:1. 基础数据:单位信息、船号状态、脚踏船船号设置、画舫船号设置、船价设置(脚踏船、画舫);2.业务管理:脚踏船(脚踏船开台、脚踏船前台...

10个实例小练习,快速入门熟练 Vue3 核心新特性(一)

作者:xuying 全栈修炼转发链接:https://mp.weixin.qq.com/s/_n2seDbbiO5hXQfuUGbUCQ前言Vue3.0 发 beta 版都有一段时间了,正式版也不远了,所以真的要学习一下 Vue3.0 的语法了。本篇文章总共分两部分,望小伙伴们认真阅读。下一篇:10...

git的几种分支模式

编写代码,是软件开发交付过程的起点,发布上线,是开发工作完成的终点。代码分支模式贯穿了开发、集成和发布的整个过程,是工程师们最亲切的小伙伴。那如何根据自身的业务特点和团队规模来选择适合的分支模式呢?本文分享几种主流 Git 分支模式的流程及特点,并给出选择建议。分支的目的是隔离,但多一个分支也意味着...

基于gitlab的PR操作教程

基于gitlab的PR操作教程注:该教程主要基于git命令行操作,其他图形化工具也可完成以下所有操作步骤,顺手即可。推荐工具:Source Tree ,TortoiseGit参考:gitflow一 . 基于分支的PR操作1. 本地切换到master分支1. 拉取最新代码2. 基于master创建ho...

Gitlab之间进行同步备份

目前,我们公司有两个研发团队,分别在北京和武汉,考虑到访问速度的问题,原有武汉的研发环境在近端部署。也就是北京和武汉分别有两套独立的研发管理环境,虽然这解决了近端访问速度的问题,但是管理上较为分散,比如研发环境备份和恢复就是最重要的问题之一。最近,处于对安全性和合规性的考虑,希望将北京和武汉的源代码...

30 个纯 HTML5 实现的游戏

浏览器和 JavaScript 的功能逐年不断的变强变大。曾几何时,任何类型的游戏都需要Flash。但随着 HTML5 发展,HTML5 + WebGL 游戏式就慢慢占领着这个舞台。以下是30款流行的游戏,它们可以在所有现代浏览器中运行,并且只使用web技术构建。1. HexGL地址:http://...