关于async await

情况一:后接函数 ,函数是同步代码 

async function foo() {
  console.log('foo start')
  console.log('foo end')
}

async function main() {
  await foo()
  console.log('after foo')
}

main()
console.log('outside') 

foo start --foo end --outside -- after foo
🧠 为啥结果是这样嘞?

用了await 关键字 函数并不是异步函数 他会先执行函数,再把await 后面的代码转化成微任务

等价于

javascript
复制代码
function foo() {
  console.log('foo start');
  console.log('foo end');
  return Promise.resolve();
}

function main() {
  return foo().then(() => {
    console.log('after foo');
  });
}

main();
console.log('outside');

情况二:后接函数 函数是异步代码

  async promisifyRemoteLoad(src) {
    return new Promise((resolve, reject) => {
      const script = document.createElement('script')
      script.src = src
      document.body.appendChild(script)

      script.onload = () => {
        resolve()
      }
      script.onerror = (e) => {
        reject(e)
      }
    })
  }

await 后面函数如果是异步函数,要返回一个新的new Promise--resolve()/reject()

情况三:后面是数字被包装成promise.resolve()

async function main() {
  await 123
  console.log('after foo')
}

main()
console.log('outside') 

输出:outside -- after foo
上述代码等价于

function main() {
  return Promise.resolve(123).then(() => {
    console.log('after foo');
  });
}

main();
console.log('outside');

总之:只要使用await  本行下的都会被推到微任务队列等待执行--如果当前函数是异步,需要resolve/reject 
 

什么时候await后面的代码不会被触发呢???

✅ 如何避免这个问题?

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值