Node 8 LTS 有 async 了很兴奋? 来,说说这 2 段代码的区别。
发布于 8 年前 作者 atian25 11568 次预览 最后一次回复是 8 年前 来自 分享
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 回复
感觉跟我这两个return差不多
rejectionWithReturnAwait 可以理解为
await一个reject的Promise在这里会抛出错误,直接被catch,因此返回resolve 'Saved!'的Promise
rejectionWithReturn 直接返回那个reject的Promise,也就是上面的err
二楼+1,另外 https://eslint.org/docs/rules/no-return-await
第一个是真的用了async,会先等待,等处理完后再返回,处理的过程抛出了异常,所以能被catch 第二个是直接执行过程,把error当作返回值返回给函数调用方,这样子就不会trycatch就没用了,其实用了障眼法,改成这样子估计大家就理解了
事实告诉我们,代码风格,易读性多么重要
@mumudev 再次回复,我不是狼叔。
@atian25 你是哥不是叔~
额 那到底是那样写比较好。。
我认为 第二个catch不到error,try catch无法捕获异步异常。
第2个等同于
@atian25 0.0
@dengnan123 第二个是有坑的,那个 catch 进不去
我觉得很容易理解的啊,await 后面跟promise对象表示执行这个这个promise拿到结果,相当于调用了这个promise的then, 第二个函数就是把promise对象返回回去而已,try catch在这里毛线用都没有,
@fantasticsoul +1
@atian25 猪叔!
@alsotang @_@
用过c#的都知道,async是有传染性的,要用就一直用到底
@mumudev 标点对阅读也很重要~ “这样就不会try catch,(也)就没用了”
来自酷炫的 CNodeMD
你在搞事情
@fantasticsoul +1
async 跟 nodejs8 有什么关系,在 nodejs 7.6 就开始有了
@Hyurl Node 8.9.0 是第一个支持 Async 的 LTS 版本
第二条异步没有使用await接受,他的返回结果就无法try/catch到
mark