async和await详解

async 和 await语法糖详解

async用于声明一个function是异步的,不管function是普通函数还是异步函数,通过async修饰之后,返回的都是一个promise对象;而 await 用于等待一个异步方法执行完成。
await只能出现在async函数中或者 let value = await promise这种在环境的顶层作用域中使用,比如在window作用顶层函数中可以使用;但是await可以用来修饰任何函数,通过await修饰的任何函数,表示等待该行数执行之后再往后执行,表明是一个同步的过程。

async用法:

async函数(包含函数语句、函数表达式、Lambda表达式)会返回一个Promise对象,如果在asyn声明的一个函数中直接return 一个直接量,async 会把这个直接量通过Promise.resolve()封装成 Promise 对象。


//async 用来修饰一个返回Promise对象的函数
async function myPromise(){
  return new Promise((res,rej)=>{
    //console.log(1);
    res()
  })
}
//async 用来修饰一个普通函数
async function normalFunc(){
  return "normal function"
}
var pro=myPromise();
var nor=normalFunc()复制代码

await用法:如下图,如果await调用不是在异步函数作用就会出错


1、await用在async函数中

2、await用在顶层函数中


function getSomething() {
    return "something";
}
function testPromise() {
    return Promise.resolve("hello Promise");
}
async function testAsync() {
    return "hello async";
}
async function testNormal() {
    const v1 = await getSomething();  //await用来修饰一个普通函数
    const v2 = await testPromise();  //await用来修饰一个返回promise对象的函数
    const v3 = await testAsync(); //await用来修饰一个通过async构成的异步函数
    //上面的await这种写法等价于下面这种promise的写法
   console.log(getSomething()) 
    let vv=testPromise().then(res=>{
            console.log(res)
            testAsync().then(res=>{
              console.log(res)
            })
         })
    console.log(v1,v2,v3);
}
testNormal()复制代码
async和await的优点用于处理Promise的.then处理,之前我们想在异步函数中达到同步的想过,所以异步执行之后的要执行的代码都会放在Promise的then方法中执行,达到同步的效果,但是async和await的出现,让js中的异步函数可以按顺序写代码的方式,达到代码顺序执行的效果。

如有什么描述不合理之处,欢迎指出



  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值