首页 > 其他分享 >ES6~ES14 之 async篇

ES6~ES14 之 async篇

时间:2024-12-23 17:31:29浏览次数:5  
标签:异步 const ES6 await console Promise async ES14

在 JavaScript 中,async 是一个非常强大的关键字,用于声明异步函数,使得你能够更方便地处理异步操作。它与 await 配合使用,能够让异步代码看起来更像同步代码,从而简化异步编程的复杂性。

1. 基本用法

async 关键字用于声明一个函数,表示该函数返回一个 Promise 对象,并且可以在函数内部使用 await 来等待异步操作的结果。

// 声明一个 async 函数
async function fetchData() {
  return "Hello, World!";
}

// 调用 async 函数
fetchData().then(result => {
  console.log(result); // 输出: "Hello, World!"
});
  • async 声明的函数总是返回一个 Promise
  • 即使你在函数中直接返回一个值,JS 会自动将它包装成一个 Promise 对象。

2. 使用 await

await 只能在 async 函数内部使用,它会暂停执行直到 Promise 被解决(fulfilled)或拒绝(rejected)。

async function example() {
  console.log("Start");

  // 等待一个 Promise
  const result = await new Promise(resolve => {
    setTimeout(() => {
      resolve("Resolved after 2 seconds");
    }, 2000);
  });

  console.log(result);  // 输出: "Resolved after 2 seconds"
  console.log("End");
}

example();

在这个例子中,await 会暂停 example 函数的执行,直到 Promise 解决。代码看起来像是同步执行的,但它实际上是异步的。

3. 错误处理

使用 async/await 时,错误处理通常通过 try...catch 来实现,这比传统的 .catch() 方法更加直观。

async function fetchData() {
  try {
    const response = await fetch('https://jsonplaceholder.typicode.com/posts/1');
    const data = await response.json();
    console.log(data);
  } catch (error) {
    console.error('Error fetching data:', error);
  }
}

fetchData();

在这个例子中,try...catch 块用于捕获异步操作中的错误。如果 fetchjson() 发生异常,它会被捕捉并输出错误信息。

4. 并发处理

如果你有多个异步操作,并且希望并行处理这些操作,可以使用 Promise.all() 或者 Promise.allSettled(),它们可以等待所有异步任务完成,并返回它们的结果。

async function fetchData() {
  const promise1 = fetch('https://jsonplaceholder.typicode.com/posts/1');
  const promise2 = fetch('https://jsonplaceholder.typicode.com/posts/2');
  
  // 并行执行两个 fetch 请求
  const responses = await Promise.all([promise1, promise2]);

  const data1 = await responses[0].json();
  const data2 = await responses[1].json();

  console.log(data1, data2);
}

fetchData();

在这个例子中,Promise.all() 可以并行执行两个 fetch 请求,它们的结果会在所有请求完成后返回。

5. 异步迭代(for await...of

如果你需要在异步迭代器中使用 async/await,可以使用 for await...of 来循环异步结果。

async function fetchData() {
  const data = [
    Promise.resolve(1),
    Promise.resolve(2),
    Promise.resolve(3),
  ];

  for await (let num of data) {
    console.log(num);
  }
}

fetchData();

这里,for await...of 会等到每个 Promise 被解决之后再进行下一步操作。

总结

  • async 用于定义一个异步函数,返回一个 Promise
  • await 用于等待一个 Promise 完成,并返回其结果,或者捕获其错误。
  • 异步操作可以通过 try...catch 语句来捕获错误。
  • Promise.all() 可以用于并行处理多个异步操作。
  • for await...of 用于异步迭代器。

asyncawait 极大地提高了异步代码的可读性,能够让你像写同步代码一样写异步逻辑。这使得代码更简洁、可维护,并且更容易理解。

标签:异步,const,ES6,await,console,Promise,async,ES14
From: https://blog.csdn.net/g18642885147/article/details/144673592

相关文章

  • async.gather()
    在Python的asyncio模块中,awaitasyncio.gather(*tasks)和awaitasyncio.wait(task_list)都用于等待多个异步任务完成,但它们在功能、用法和行为上有一些细微的区别。下面我会详细解释它们的不同之处。1.asyncio.gather(*tasks)asyncio.gather(*tasks)是一个非常常用的方......
  • JavaScript ES6 中的 Reflect
    在JavaScriptES6中,引入了一个新的全局对象Reflect。它提供了一组用于拦截JavaScript操作的方法,这些方法与Proxy对象一起使用,可以实现元编程(在运行时改变程序行为的能力)。一、为什么需要Reflect?标准化操作:在ES6之前,一些类似的操作分散在不同的对象上,并且行为可能不一致。......
  • ES6 async await只能保证async内部顺序调用顺序
    ES6asyncawait只能保证async内部顺序调用顺序引言基本概念与作用说明Async函数Await运算符内部操作顺序调用顺序示例一:简单的async函数示例二:多个async函数的调用示例三:控制调用顺序示例四:并行与顺序结合示例五:错误处理不同角度的功能使用思路API请求管理数据预加载......
  • JS中CommonJS和ES6模块的区别
    JS中CommonJS和ES6模块的区别引言CommonJS模块基本概念与作用说明示例一:创建一个CommonJS模块示例二:使用CommonJS模块ES6模块基本概念与作用说明示例三:定义一个ES6模块示例四:导入并使用ES6模块示例五:默认导出与命名导出不同角度的功能使用思路动态vs静态模块加载单......
  • 如果 Microsoft Dynamics CRM 中的 AsyncOperationBase 表变得太大,性能会变慢
    原文PerformanceisslowiftheAsyncOperationBasetablebecomestoolargeinMicrosoftDynamicsCRM-MicrosoftSupportSymptoms当您运行MicrosoftDynamicsCRM4.0、MicrosoftDynamicsCRM2011、MicrosoftDynamicsCRM2013或MicrosoftDynamicsCRM2015时,As......
  • 深入聊聊async&Promise
    正文最近在学习JavaScript里的async、await异步,对于其中的Promise状态以及背后的Js引擎实际运行状态不大理解且很感兴趣,因此花了一点时间仔细研究了一下。从Example说起constcreateImg=function(path){returnnewPromise((resolve,reject)=>{constimg=docu......
  • .net core中异步async await
    基本原理async,await是C#语言中用于简化异步操作的语法糖,实际会由编译器将代码翻译生成状态机来执行异步操作。状态机是一种数学模型,用于描述一个系统在不同状态之间的转换行为。它由一组状态和一组转换组成,在特定的输入条件下,系统从一个状态转换到另一个状态。例如如下的异......
  • 你不知道的 async、await 魔鬼细节
    0、前言关于promise、async/await的使用相信很多小伙伴都比较熟悉了,但是提到事件循环机制输出结果类似的题目,你敢说都会?asyncfunctionasync1(){awaitnewPromise((resolve,reject)=>{resolve()})console.log('A')}async1()newPromi......
  • 浅析 C# Async 和 Await 【代码之美系列】
    文章目录一、引言......
  • CloseableHttpAsyncClient使用代理问题记录
    目录场景背景问题解决过程解决方案总结场景背景项目A部署到现场后,甲方要求调用接口上传某些数据给他们。问题代码很快就开发完成了,但是领导要求必须想办法调用一次测试一次,而且现场没有测试环境(测试当生产用),只能本地使用VPN然后再调用接口测试。VPN本身很多坑就不说了,后面VP......