async 和 await 浅析 ----(懂Promise的进!)

async 和 await 浅析----(懂Promise的进!)

如果你暂时不明白promise,请不要看这边文章,建议去看别的文章。

两件事:

  1. async 做了啥?
  2. await在等啥?
async 做了啥?
async function fn1(){
    return 123
}
function fn2(){
    return 123
}

console.log(fn1()); // Promise{123}
console.log(fn2()); // 123

// fn1()返回的是promise对象,所以能够执行链式调用,上边return的数据,在这里能够取用
fn1().then((res)=>{
    console.log('res',res)
})
// fn2()进行链式调用就会直接报错
fn2().then((res)=>{
    console.log('res',res)
})

【答案】 被async 声明的函数,return的值会被自动包装成Promise对象,能够使用链式操作。

await 在等啥?
async function num1(){
    console.log(1)  
    let a = await num2()
    console.log(a)
    console.log(3)
    return a
}
function num2(){
        console.log(2)
        return 4
}

输出的顺序是 1 2 4 3 ----> 说明啥?—>说明以下几点:

  1. await后边是同步的话,不影响代码的执行顺序,从上到下,依次执行;
  2. await 后边的同步代码 执行完之后,会将后边代码return的值给 前边的 a ;
  3. await不会吧后边的函数自动转化成 Promise对象(像async那样);

》》》》那它究竟在等啥? 不是好多文章都说异步请求要放在await后边的嘛!

【答案】await 在等它身后的函数返回的Promise对象,注意,不是这个函数是一个promise对象,而是他返回的promise对象,言下之意就是 你必须保证num2()这个函数里边return 的是一个Promise对象。

不多说,上代码!

async function num1(){
    console.log(1)
    let a = await num2()
    console.log('a',a)
    console.log(3)
    return a
}
 
function num2(){
   return new Promise((resolve,reject)=>{
    setTimeout(() => {
        console.log(2)
        resolve('异步请求')
       }, 200);
   })
}

num1().then((res)=>{
    console.log('res',res)
})

输出的顺序是:1 2 a异步请求 3 res异步请求

仔细看这个代码的执行顺序,你会发现,异步变成了同步操作;并且所有的代码都按照顺序执行了,这里成功模拟了,异步执行变成同步执行。

最关键的就是在num2( ) 中 return的Promise((resolve,reject)=>{})

await 不是等的一个Promise的结果,它等的是一个Promise的对象,是一个有状态的Promise对象!而不是一个Promise的结果或者一个普通函数return的结果

如果你还是不懂,就记住这个固定写法吧。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值