关于 promise 和 async/await 写法问题?跪求!

有一个关于async的写法问题,如下:
定义了一个api,fetchUser(),可以有两种写法:
第一种,不进行错误的显示处理
constfetchUser=async()=>{
constres=awaitaxios.get('https://example.com')
returnres.data
}
第二种,使用try..catch包裹
constfetchUser=async()=>{
try{
constres=awaitaxios.get('https://example.com')
returnres.data
}catch(e){
throwe.response
}
}
使用上貌似没有差别,如下:
fetchUser()
.then(user=>console.log(user))
.catch(err=>console.error(err))
个人的疑惑在于错误的捕获和处理,个人理解在于,只要是出现了错误,那么返回的promise对象就变成reject,只是第二个使用了catch捕获后包裹了一下错误信息再手动抛出.第一种少些了一点代码...
所以想请教一下:
这两种写法有没有具体的差别,或者说,再更加复杂的异步情况下会有哪些不同?
使用哪种写法更加优雅?
若能解答,不胜感激,多谢!
凤凰求蛊
浏览 406回答 2
2回答

吃鸡游戏

在你这个情景下对调用者来说2个函数没差,你捕获错误又原样抛出多此一举。但在大规模应用下你最外层得套一层trycatch来统一处理错误吧?这个时候第二种写法就很有用了,可以额外加error_message再throw出去,让最外层迅速知道发生错误的是什么原因,问题出现在哪个函数,给出准确提示。你如果不做二次trycatch封装想实现这种效果就难度大了。

米琪卡哇伊

你的问题不是不知道async/await与Promise的区别,是不知道怎么写try...catch...。try...catch...的目的是捕获错误,并进行处理。发生错误意味着开发者不知道接下来怎么做,只能抛出错误,让其它开发者处理。捕获错误意味你明白接下来的代码有一些风险,你也打算处理发生的错误。具体到你的例子里,httprequest可能面临网络断开、服务器出错、返回数据格式不对等错误,所以我们可以捕获这些错误,给出对应的提示。比如网络断开,就让用户联网;服务器出错,让用户等下再试试;格式不对,让用户反馈问题给某某。至于你怎么写,用async/await还是promise,无所谓,没有什么区别。但是你catch之后再抛出就莫名其妙了。
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

JavaScript