async函数

举报
骁M_M 发表于 2021/04/26 17:42:57 2021/04/26
【摘要】 一、Promise与asyncPromise:我们通过在函数内部new Promise返回一个实例,再使用then方法传入回调,达到异步操作的过程async:不需要我们手动返回promise实例,只要在function前加async,async会自动把返回值变为promise实例,javascript引擎会检查return后面是不是一个promise实例,不是的话会用Promise.reso...

一、Promise与async

Promise:我们通过在函数内部new Promise返回一个实例,再使用then方法传入回调,达到异步操作的过程

async:不需要我们手动返回promise实例,只要在function前加async,async会自动把返回值变为promise实例,javascript引擎会检查return后面是不是一个promise实例,不是的话会用Promise.resolve()处理返回结果

async function firstAsync() {
    return 27;
}

等价于

async function firstAsync() {
    return Promise。resolve(27);
}

console.log(firstAsync().then());// 27
console.log(firstAsync() instanceof Promise); // true

如果async函数体内部有异步操作,需要用到await

async function firstAsync (){
   let promise = new Promise ((resolve, reject)=>{
      setTimeout(function(){
          resolve('now it is done')
      },1000)
  })// 异步操作,1s后执行
 promise.then(val=> {
   console.log(val);
 })
  console.log(2);
  return 3;
}

// 2 3 now it is done

但希望输出的的是 now it is done 2 3
可以这么写

async function firstAsync (){
   let promise = new Promise ((resolve, reject)=>{
      setTimeout(function(){
          resolve('now it is done')
      },1000)
  })// 异步操作,1s后执行
 console.log(await promise) // await 等待的是表达式 就是一个结果
  console.log(2);
  return 3;
}

如果await 后面不是一个promise对象而是常量,会转成一个立即resolve的Promise对象

async function firstAsync (){
       let promise = new Promise ((resolve, reject)=>{
          setTimeout(function(){
              resolve('now it is done')
          },1000)
      })// 异步操作,1s后执行
     console.log(await 30);
     console.log(await Promise.resolve(40));
      console.log(2);
      return 3;
    }

// 30 40 2 3

async await 是Promise 的语法糖

【版权声明】本文为华为云社区用户原创内容,转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息, 否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。