Node 8 LTS 有 async 了很兴奋? 来,说说这 2 段代码的区别。
async function rejectionWithReturnAwait () {
try {
return await Promise.reject(new Error());
} catch (e) {
return 'Saved!';
}
}
async function rejectionWithReturn () {
try {
return Promise.reject(new Error());
} catch (e) {
return 'Saved!';
}
}
23 回复
rejectionWithReturnAwait 可以理解为
const err = await Promise.reject(new Error());
return err;
await一个reject的Promise在这里会抛出错误,直接被catch,因此返回resolve 'Saved!'的Promise
rejectionWithReturn 直接返回那个reject的Promise,也就是上面的err
第一个是真的用了async,会先等待,等处理完后再返回,处理的过程抛出了异常,所以能被catch 第二个是直接执行过程,把error当作返回值返回给函数调用方,这样子就不会trycatch就没用了,其实用了障眼法,改成这样子估计大家就理解了
async function rejectionWithReturnAwait() {
try {
const result = await Promise.reject(new Error());
return result;
} catch (e) {
return "Saved!";
}
}
async function rejectionWithReturn() {
try {
const result = Promise.reject(new Error());
return result;
} catch (e) {
return "Saved!";
}
}
console.log("1:" + rejectionWithReturnAwait());
console.log("2:" + rejectionWithReturn());
事实告诉我们,代码风格,易读性多么重要
我觉得很容易理解的啊,await 后面跟promise对象表示执行这个这个promise拿到结果,相当于调用了这个promise的then, 第二个函数就是把promise对象返回回去而已,try catch在这里毛线用都没有,