问题描述
首先,我正在跟进这个问题,我发布了一些几分钟前
To begin with, I am taking a follow up from this question I posted few moments ago
现在,我以为我知道 Aysnc 和 Promise,但显然我遗漏了一些东西.
Now, I thought I knew Aysnc and Promise but clearly I am missing something.
参考 estus 标记的答案,
除非 API 支持 promises,否则错误应该完全在异步函数.函数体应该用 try..catch 包裹起来排除未处理的拒绝,这可能会导致将来出现异常节点版本
从中我能够理解,每当我们使用aysnc函数并且我们想要进行错误处理时,我们都需要使用try..catch
,对于普通的 Promise,我们可以简单地做 resolve/reject 或者如果它已经是一个承诺,那么我们可以链接并做 .then
和 .catch
但为此我得到了以下评论
From which I was able to comprehend that whenever we are using aysnc function and we want to do error Handling we need to use try..catch
and for normal Promises we could simple do resolve/reject or if it is already a promise then we can chain and do .then
and .catch
but for that I got following reply on comment
是的,您可能会遇到错误.async/await 只是语法糖原始承诺.任何异步函数都可以用普通的 ES6 重写
我可能会保留这个问题的广泛性,但有人可以帮我解释一下..
I might be keeping this question broad but can someone please help me in explaining..
什么时候需要使用
.then
和 .catch
什么时候需要使用
try..catch
还有,
除非 API 支持承诺
推荐答案
异步等待代码看起来更简洁易读.Promise 是为了解决回调地狱问题而创建的,但是链接很多 Promise 也令人困惑.所以 async wait 是一种语法糖,你可以使用 .then 或 async await 中的任何一个.
Async await code looks cleaner and easy to read. The Promises were created to solve the callback hell problem but chaining a lot of promises also confusing. So async wait is a syntactical sugar and you can use any one of the .then or async await.
如果你使用简单的 promise 语法,那么你可以使用 .then.then.then.catch() 语法.
If you are using simple promises syntax then you can use .then.then.then.catch() syntax.
如果您使用 async 和 await,那么您必须使用 try catch.所有的 await 都将进入 try,而 catch 条件将进入单个 catch.
if you are using async and await then you have to use try catch. All the await will go in try and the catch condition would go in single catch.
当您使用的 API/函数返回承诺时,这两种方法都可以使用.
Both these can be used when API/function you are using returns a promise.
这篇关于如何处理错误并正确使用promise的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持!