async函数 与 await命令

1. async 函数

async 函数返回的是Promise对象。Promise对象的结果由async函数执行的返回值决定。

(1)如果返回的是字符串、数字、null、undefined、或 没有返回值等,得到的是状态为Fulfilledpromise对象。

async function fn(){
    return 'hello';
}
console.log(fn());

在这里插入图片描述
(2)若函数内部抛出错误会导致返回的 Promise 对象变为 reject 状态

async function fn(){
     throw new Error('出错啦!!!')
 }
 console.log(fn());

在这里插入图片描述
(3)如果返回的是一个Promise对象,则其返回的Promise的状态由这个对象决定。

async function fn(){
    return new Promise((resolve,reject)=>{
        // resolve('成功啦')
        reject('出错啦')
    })
}
console.log(fn());

在这里插入图片描述

2. await 命令

await必须写在async函数中,右侧的表达式一般为promise对象

const p = new Promise(resolve=>{
     resolve('我成功啦')
 })

 async function fn(){
     let aw =await p;
     console.log(aw);
 }
 fn();

在这里插入图片描述
只要一个await语句后面的Promise变为reject,那么整个async函数都会中断执行。

async function fn(){
   let p1 = await Promise.resolve('成功了')
   console.log(p1);
   let p2 = await Promise.reject('出错了')
   console.log(p2);
   let p3 = await Promise.resolve('hello~')
   console.log(p3);
 }
 fn();

console.log(p2);之后的语句都不会被执行,因为第二个await语句状态已经变为reject了
在这里插入图片描述
这时可以将第二个await放在try...catch结果里面,这样不管这个异步操作是否成功,都不会中断后面的异步操作。

async function fn(){
   let p1 = await Promise.resolve('成功了')
   console.log(p1);
   
   try{
     let p2 = await Promise.reject('出错了')
     console.log(p2);
   }catch(e){}

   let p3 = await Promise.resolve('hello~')
   console.log(p3);
 }
 fn();

在这里插入图片描述
或在 await后面的Promise对象后添加一个catch方法,处理前面可能出现的错误

async function fn(){
   let p1 = await Promise.resolve('成功了')
   console.log(p1);
   let p2 = await Promise.reject('出错了').catch(e=>console.log(e))
   let p3 = await Promise.resolve('hello~')
   console.log(p3);
 }
 fn();

注意:

async函数返回的Promise对象必须等到内部所有await命令后面的Promise对象执行完才会发生状态改变,除非遇到return语句或抛出错误。也就是说,只有async函数内部的异步操作执行完,才会执行then方法指定的回调函数

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
当一个函数只加上async而没有加上await时,它仍然是一个异步函数,但它并不等待任何Promise对象的完成。这意味着,即使函数内部有异步操作,它也立即返回一个Promise对象,而不等待异步操作的结果。这在某些情况下可能是有用的,比如在一个函数内部同时执行多个异步操作,并在它们都完成后再处理结果。另外,当一个函数被标记为async时,它的返回值将始终是一个Promise对象,即使函数内部没有使用await关键字。因此,调用这个函数时,我们可以使用then()方法来处理返回Promise对象,以获取最终的结果。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* *2* [浅谈async函数await用法](https://blog.csdn.net/sinat_28585351/article/details/107630429)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_1"}}] [.reference_item style="max-width: 50%"] - *3* [详解Node.js中的Async和Await函数](https://download.csdn.net/download/weixin_38724154/13762598)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_1"}}] [.reference_item style="max-width: 50%"] [ .reference_list ]

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

焦妮敲代码

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值