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!';
}
}
感觉跟我这两个return差不多
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());
事实告诉我们,代码风格,易读性多么重要
@mumudev 再次回复,我不是狼叔。
@atian25 你是哥不是叔~
额 那到底是那样写比较好。。
我认为 第二个catch不到error,try catch无法捕获异步异常。
第2个等同于
Promise.resolve(Promise.reject(new Error()))
@atian25 0.0
@dengnan123 第二个是有坑的,那个 catch 进不去
我觉得很容易理解的啊,await 后面跟promise对象表示执行这个这个promise拿到结果,相当于调用了这个promise的then, 第二个函数就是把promise对象返回回去而已,try catch在这里毛线用都没有,
@atian25 猪叔!
用过c#的都知道,async是有传染性的,要用就一直用到底
你在搞事情
async 跟 nodejs8 有什么关系,在 nodejs 7.6 就开始有了
@Hyurl Node 8.9.0 是第一个支持 Async 的 LTS 版本
第二条异步没有使用await接受,他的返回结果就无法try/catch到
mark