Javascript 在哪里异步/等待超过承诺?
我知道async/await本质上是相同的(至少在V8中是如此)。我已经广泛地使用了这两种方法,并且注意到我越来越多地避免使用async/Wait。我还注意到,每当我被迫编写基于async/await的代码时,势头会显著下降 •是否存在异步/等待客观上优于承诺的场景 •…如果不是,为什么有些人坚持异步/等待 •流量控制应使用什么选项?这是否取决于流量的长度Javascript 在哪里异步/等待超过承诺?,javascript,asynchronous,promise,async-await,es6-promise,Javascript,Asynchronous,Promise,Async Await,Es6 Promise,我知道async/await本质上是相同的(至少在V8中是如此)。我已经广泛地使用了这两种方法,并且注意到我越来越多地避免使用async/Wait。我还注意到,每当我被迫编写基于async/await的代码时,势头会显著下降 •是否存在异步/等待客观上优于承诺的场景 •…如果不是,为什么有些人坚持异步/等待 •流量控制应使用什么选项?这是否取决于流量的长度 •如果目标是生成易于阅读和理解的代码,是否有明确的选择?Gokul N K有一篇关于这方面的精彩文章,我非常同意: 从我的观点来看,我认为
•如果目标是生成易于阅读和理解的代码,是否有明确的选择?Gokul N K有一篇关于这方面的精彩文章,我非常同意: 从我的观点来看,我认为
async/await
在等待承诺解析方面更好(顺便说一句,异步函数返回承诺)
例如,当我调用处理数据的异步函数(DB或第三方API)时,我在节点环境中更频繁地使用async/await
。比如:
上面的代码不是真实的,但是显示了如果没有多个then
嵌套,代码看起来有多酷。顺便说一句,使用试试。。。在一个async
函数中使用wait
多次(超过两次)时,捕获以进行错误处理。否则,您可以对@Bergi提到的等待承诺使用.catch()
另一方面,我使用浏览器中的承诺来控制流,但不操纵数据
例如:
// client
function onRemoveClick(commentId) {
service.removeComment(commentId).then(() => {
DOM.removeCommentElement(commentId);
});
}
因为如果我使用wait
它会变成:
async function onRemoveClick(commentId) {
const response = await service.removeComment(commentId);
if (response.status === 'ok') {
DOM.removeCommentElement(commentId);
}
}
这是一个相当长的过程,而且它总是解析一个第一眼就看不出来的HTTP响应。无论使用什么语法,您总是使用承诺。确保您已经理解了承诺,并且wait
仅代替then
呼叫。几乎没有哪种情况下不使用wait
更简单。您可能希望向我们展示一些您发现然后
更易于使用的代码,解释您的推理,并向我们展示您如何努力获得等效的异步
/等待
版本的代码。@plalx不,它是promise然后
调用的语法糖。而且它也不允许处理同步进程——但它允许使异步进程很容易按顺序进行。尝试在for循环中使用wait
,然后尝试将其更改为严格使用承诺。这很难!“当您使用async/await
时,请始终使用try…catch
进行错误处理。”@Bergi您是对的,对于单个async
调用或范围错误处理,您希望使用catch
进行等待承诺,但它破坏了async/await
平坦性的整体美。编辑。是的,只是说在某些情况下,您需要一个非平坦的控制流,然后try
会成为阻碍。有时(特别是节点中的DB操作),我只是不使用这两种方法。我设置了错误处理挂钩,编写了更干净的代码,万一发生错误,服务器只返回500个错误,然后我就可以在日志中看到实际的错误
async function onRemoveClick(commentId) {
const response = await service.removeComment(commentId);
if (response.status === 'ok') {
DOM.removeCommentElement(commentId);
}
}