参见英文答案 >
What is the difference between JavaScript promises and async await? 6个
我知道异步/等待在引擎盖下基本相同(至少在V8中).我已广泛使用这两个,我注意到我避免异步/等待越来越多.我还注意到,每当我被迫编写基于async / await的代码时,动量就会显着下降.
•是否存在async / await客观上优于Promises的情况?
•…如果没有,为什么有些人坚持异步/等待?
•流量控制应该使用什么选项?这取决于流量的长度吗?
•如果目标是生成易于阅读和理解的代码,是否有明确的选择?
最佳答案 关于Gokul N K的一篇很棒的文章,我几乎同意这一点:
https://hackernoon.com/should-i-use-promises-or-async-await-126ab5c98789
从我的角度来看,我会说async / await在等待promise解析方面更好(异步函数返回promises,btw).
例如,当我调用操作数据的异步函数(DB或第三方API)时,我在节点环境中使用async / await更频繁.喜欢:
// server
async function removeComment(commentId) {
const comment = await getComment(commentId);
if (comment) {
const commentAuthorUserId = await getUser(comment.userId);
notifyUser(commentAuthorUserId);
await removedCommentFromDB(comment);
res.json({ status: 'ok' });
}
}
上面的代码不是真实的,但显示代码看起来有多酷,没有多个嵌套.顺便说一句,当你在一个异步函数中使用等待多次(超过两次)时,使用try … catch进行错误处理.否则,您可以使用.catch()等待承诺,如@Bergi所述.
另一方面,我在浏览器中使用Promises来控制流,但不操纵数据.
例如:
// client
function onRemoveClick(commentId) {
service.removeComment(commentId).then(() => {
DOM.removeCommentElement(commentId);
});
}
因为如果我使用await它变成:
async function onRemoveClick(commentId) {
const response = await service.removeComment(commentId);
if (response.status === 'ok') {
DOM.removeCommentElement(commentId);
}
}
这是一个相当长的时间,它也总是解决HTTP响应,这在第一眼看上去并不明显.