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)
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 分享4款.NET开源、免费、实用的商城系统
· 全程不用写代码,我用AI程序员写了一个飞机大战
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· 白话解读 Dapr 1.15:你的「微服务管家」又秀新绝活了
· 上周热点回顾(2.24-3.2)