javascript - 等待 promise 链有什么问题?

标签 javascript promise async-await anti-patterns

我正在开发 Angular 6 应用程序,有人告诉我以下是反模式:

await someFunction().then(result => {
    console.log(result);
});

我意识到等待 promise 链是没有意义的。如果 someFunction() 返回一个 promise,那么如果你正在等待它,你就不需要一个 promise 链。你可以这样做:

const result = await someFunction();
console.log(result);

但有人告诉我等待 promise 链会导致错误,或者它会破坏我的代码。如果上面的第一个代码片段与第二个代码片段做同样的事情,那么使用哪个代码片段有什么关系。第一个片段引入了哪些第二个片段没有引入的危险?

最佳答案

I’m being told awaiting a promise chain will break things in my code.

不一定,你的两个代码片段确实工作相同(只要 someFunction() 真的返回一个 promise )。

What does it matter which one is used. What dangers does the first snippet introduce that the second one doesn’t?

更难理解和维护,混合不同的风格会让人困惑。困惑会导致错误。

考虑到您需要在 console.log() 调用的位置添加另一个 promise 调用,甚至是函数的条件返回。你能像在函数的其他地方一样在回调中使用 await 吗,你是否需要 return 来自 then 回调的结果,是否有可能从外部函数返回?所有这些问题甚至都没有出现在第一个片段中。虽然您的玩具示例可以轻松回答这些问题,但在具有更复杂和嵌套控制流的实际代码中可能并不那么容易。

所以你应该更喜欢更简洁干净的那个。为一致性坚持使用await,避免async functions1中的then

1:当然,规则总有异常(exception)。我会说它比 use promise chaining for error handling 更干净在某些情况下,您会使用 catch 或第二个 then 回调。

关于javascript - 等待 promise 链有什么问题?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54385676/

相关文章:

javascript - 对 var app=express() 有点困惑

javascript - JavaScript Promise 如何在幕后工作

javascript - 为什么 async await 函数返回一个值,而 promise 函数返回一个未定义的值?

javascript - 用错误修饰 JavaScript Promise

javascript - 使用PDF.js异步加载多个pdf文件时获取总页数

javascript - 解决数组推送的 promise - javascript

javascript - winjs appbar.wincontrol 为空

javascript - Firebug v2.0.1 在旧断点处中断

c# - 在 C# 异步代码中使用 MongoDB ClientSessions & Transactions 是否安全?

javascript - ckeditor 在 Bootstrap 模式中打开时清除数据