首页 > 其他分享 >await/async/Promise

await/async/Promise

时间:2023-06-26 16:46:23浏览次数:32  
标签:异步 函数 对象 await 关键字 Promise async

await 关键字:
在JavaScript中,await关键字用于等待一个异步函数的完成,并暂停当前函数的执行,直到异步函数返回一个解决的值(resolved value)或被拒绝的原因(rejected reason)。

await关键字只能在async函数内部使用。使用await时,需要将其放置在一个返回Promise的异步函数前面,并使用await等待该异步函数的执行结果。

以下是await的用法示例:

async function fetchData() {
  // 异步操作,返回一个Promise对象
  const response = await fetch('https://api.example.com/data');
  
  // 等待异步操作完成后获取结果
  const data = await response.json();
  
  // 对获取的数据进行处理
  console.log(data);
}

// 调用包含await的异步函数
fetchData();

在上面的示例中,fetchData函数是一个异步函数,使用await关键字等待fetch函数返回的Promise对象的结果。在等待期间,fetchData函数会暂停执行,直到Promise对象解决(或被拒绝)为止。然后,获取解决的结果,并进行进一步的处理。

需要注意的是,使用await关键字时,所等待的表达式必须返回一个Promise对象。如果不是Promise对象,它将被自动包装成一个解决的Promise对象。

Promise 对象:
Promise是JavaScript中用于处理异步操作的对象。它代表了一个可能在未来完成或失败的操作,并提供了一种结构化的方式来处理异步操作的结果。

Promise对象具有以下特点:

  1. 状态(State):Promise对象有三种状态:进行中(pending)、已完成(fulfilled)和已拒绝(rejected)。初始状态为进行中,可以转变为已完成或已拒绝。一旦状态发生改变,就不可再变。

  2. 解决值(Resolved value):Promise对象在状态转变为已完成时会返回一个解决值,表示操作成功完成的结果。

  3. 拒绝原因(Rejection reason):Promise对象在状态转变为已拒绝时会返回一个拒绝原因,表示操作失败的原因。

Promise对象提供了一组方法来处理异步操作的状态和结果,其中包括:

  • then(onFulfilled, onRejected):当Promise对象状态变为已完成时,调用onFulfilled函数;当状态变为已拒绝时,调用onRejected函数。可以通过链式调用多个then方法来处理操作的连续步骤。

  • catch(onRejected):当Promise对象状态变为已拒绝时,调用onRejected函数。相当于then(null, onRejected)的简写形式。

  • finally(onFinally):无论Promise对象状态如何(已完成或已拒绝),都会执行onFinally函数。

通过使用Promise对象,可以更方便地处理异步操作的结果,避免了回调地狱(callback hell)的问题,并提供了更清晰、可读性更高的代码结构。

async 关键字:
async 是 JavaScript 中的一个关键字,用于定义一个异步函数(async function)。异步函数是一种特殊的函数,它可以通过 await 关键字来暂停函数的执行,等待一个 Promise 对象的状态变为已完成,然后恢复函数的执行。

异步函数的定义方式如下:

async function functionName() {
  // 函数体
}

在异步函数内部,可以使用 await 关键字来等待一个 Promise 对象的结果。await 关键字后面跟着一个 Promise 对象,如果 Promise 对象的状态变为已完成,则返回 Promise 对象的解决值,否则暂停函数的执行直到 Promise 对象的状态变为已完成。

使用异步函数可以简化异步操作的代码,使代码更加清晰易读。通过 await 关键字,可以避免回调函数的使用,使异步操作的流程更加线性,更类似于同步代码的写法。

以下是一个使用异步函数的示例:

async function fetchData() {
  try {
    const response = await fetch('https://api.example.com/data');
    const data = await response.json();
    console.log(data);
  } catch (error) {
    console.error(error);
  }
}

在上述示例中,fetchData 函数是一个异步函数。它使用 await 关键字等待 fetch 函数返回的 Promise 对象,然后使用 await 关键字等待 response.json() 方法返回的 Promise 对象。这样可以保证在获取到数据后再进行后续的操作,避免了回调函数的嵌套使用。

标签:异步,函数,对象,await,关键字,Promise,async
From: https://www.cnblogs.com/yizhouiqpl/p/17506099.html

相关文章

  • promise
    1.处理异步有哪些方式在计算机编程中,处理异步操作的方式有多种。下面是一些常见的处理异步的方式:回调函数(CallbackFunctions):这是一种传统的处理异步操作的方式。在这种模式下,可以将一个函数作为参数传递给异步操作,当操作完成时,调用该函数进行后续处理。这种方式简单直接,但容......
  • 异步注解@Async使用自定义线程池
    1.@Async注解@Async是java中一个注解,其作用就是加上该注解的类或方法能够异步执行任务,该注解添加到方法上时,表示该方法是异步方法,添加到类上时,表示该类中的所有方法都是异步方法。该注解的代码为:可以看出其是作用在类和方法上,能够在运行时被获取到。当在使用@Async时,如果不指......
  • SpringBoot用@Async实现异步调用
    @Async的使用1、在启动类中加上注解@EnableAsync启用异步 2、在使用异步的方法上加上注解@Async,自己写一个线程池,指定线程池。不建议使用默认的线程池。 在线程池应用中,参考阿里巴巴java开发规范:线程池不允许使用Executors去创建,不允许使用系统默认的线程池,推荐通过T......
  • Asynchronous & Synchronous Reset
    第1章复位的目的复位信号在数字电路里面的重要性仅次于时钟信号。对一个芯片来说,复位的主要目的是使芯片电路进入一个已知的,确定的状态。主要是触发器进入确定的状态。在一般情况下,芯片中的每个触发器都应该是可复位的。在某些情况下,当在高速应用程序中使用流水线触发器(移位寄......
  • C#语言async, await 简单介绍与实例(入门级)
       本文介绍异步编程的基本思想和语法。在程序处理里,程序基本上有两种处理方式:同步和异步。对于有些新手,甚至认为“同步”是同时进行的意思,这显然是错误的。同步的基本意思是:程序一个个执行方法,或者说在方法调用上,fun1(),fun2(),fun3(),fun4().. 按顺序调用,而异步的意思......
  • 回调函数、Promise、Generator 函数和async
    看了几篇文章,受益匪浅,写几个demo看下理解是否正确:文章链接:Generator函数的含义与用法-阮一峰的网络日志(ruanyifeng.com)  async函数的含义和用法-阮一峰的网络日志(ruanyifeng.com)回调函数<script>//----------------------------回调函数-------------------......
  • ProgressDialog在 AsyncTaskTask 中的单独使用
    publicclassAsyncClassextendsAsyncTask<Void,String,Void>{privateContextcontext;ProgressDialogdialog;publicAsyncClass(Contextcxt){context=cxt;dialog=newProgressDialog(context);......
  • Python asyncio 库源码分析
    Pythonasyncio库源码分析前言本着「路漫漫其修远兮,吾将上下而求索」的精神。终于要开始深入研究Python中asyncio的源码实现啦。本文章可能篇幅较长,因为是逐行分析asyncio的实现,也需要读者具有一定的asyncio编码经验和功底,推荐刚开始踏上Python异步编程之旅的朋......
  • 数据库转移到sd卡AsyncTask,ProgressDialog使用
    privateclassExportDatabaseFileTaskextendsAsyncTask<String,Void,Boolean>{privatefinalProgressDialogdialog=newProgressDialog(ctx);//canuseUIthreadhereprotectedvoidonPreExecute(){this.di......
  • 在JavaScript中实现Promise对象
    classPromise2{#status='pending'constructor(fn){this.q=[]constresolve=(data)=>{this.#status='fulfilled'constf1f2=this.q.shift()if(!f1f2||!f1f2[0])returnconstx=f1f2[0].ca......