场景在哪里异步/等待Promise



我知道async/await本质上是一样的(至少在V8中是这样)。我已经广泛使用了这两种方法,并注意到我越来越多地避免异步/等待。我还注意到,每当我被迫编写基于async/await的代码时,势头就会显著下降。

•是否存在异步/等待在客观上优于Promises的情况?

•。。。如果没有,为什么有些人坚持异步/等待?

•流量控制应使用什么选项?这取决于水流的长度吗?

•如果目标是生成易于阅读和理解的代码,是否有明确的选择?

Gokul N K有一篇很棒的文章,我非常同意:

https://hackernoon.com/should-i-use-promises-or-async-await-126ab5c98789

从我的角度来看,async/await只是在等待promise解析方面更好(异步函数返回promise,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' });
}
}

上面的代码不是真实的,但显示了在没有多个then嵌套的情况下代码看起来有多酷。顺便说一句,当您在一个async函数中多次(两次以上)使用await时,请使用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响应。

最新更新