async

async

async函数是Generator函数的语法糖.将*换成await,将yield转换为await,不需要co模块那样的执行器来保证自动执行,返回值是Promise(那还用那么麻烦的东西干嘛,cao)。

const asyncReadFile = async function () {
  const f1 = await readFile('/etc/fstab');
  const f2 = await readFile('/etc/shells');
  console.log(f1.toString());
  console.log(f2.toString());
};

async函数抛出错误会导致Promise对象变成reject状态,抛出的错误对象被catch捕获,前一个return会被then回调函数收到。

  • 返回的Promise对象只有等到内部所有的await后面的Promise对象执行完,才会状态变化.
  • 对应的,使用到了thenable对象都会将它等同于Promise对象。
  • 如果await后面的Promise对象变为reject状态,整个async函数会被中断执行。
  • 如果希望在前一个await语句出错时,后面的await语句可以继续执行:
//使用try...catch
try{
    await ...
}catch(e){

}
await ...
//使用catch
async function f(){
    await Promise.reject('出错了')
    .catch(e => console.log(e));
}

实现出错时多次尝试访问的功能:

  for (i = 0; i < NUM_RETRIES; ++i) {
    try {
      await superagent.get('http://google.com/this-throws-an-error');
      break;
    } catch(err) {}
  }

发送并发请求时,为了并发执行,注意async函数内部是继发执行的,而外部循环async可以达到并发执行的效果:

//继发执行:
async function logInOrder(urls){
  const res=await fecth(url);
  return ...
}
//并发
const text=urls.map(async url=>{
  const res=await fetch(url);
  return ...
})

顶层await的使用,用于对模块进行加载操作:
export const output=someProcess((await dynamic).default,await data)

posted @   梦呓qwq  阅读(78)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 分享4款.NET开源、免费、实用的商城系统
· 全程不用写代码,我用AI程序员写了一个飞机大战
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· 白话解读 Dapr 1.15:你的「微服务管家」又秀新绝活了
· 上周热点回顾(2.24-3.2)
点击右上角即可分享
微信分享提示