Gib*_*hah 5 javascript anti-patterns promise async-await
我正在研究一个Angular 6应用程序,我被告知以下是一个反模式:
await someFunction().then(result => {
console.log(result);
});
Run Code Online (Sandbox Code Playgroud)
我意识到等待承诺链是毫无意义的.如果someFunction()返回一个promise,那么如果你正在等待它,则不需要一个promise链.你可以这样做:
const result = await someFunction();
console.log(result);
Run Code Online (Sandbox Code Playgroud)
但我被告知等待一个承诺链可能会导致错误,或者它会破坏我的代码中的东西.如果上面的第一个代码片段与第二个代码段完全相同,那么使用哪个代码片段至关重要.第一个片段引入了哪个危险,第二个片段没有?
Ber*_*rgi 10
有人告诉我等待承诺链会破坏我的代码。
不一定,你的两个代码片段确实工作相同(只要someFunction()
真的返回一个承诺)。
使用哪一个有什么关系。第一个片段引入了第二个没有的危险?
更难理解和维护,混合不同的风格很混乱。混乱会导致错误。
考虑到您需要在调用位置添加另一个 Promiseconsole.log()
调用,甚至是函数的条件返回。您是否可以await
像函数中的其他地方一样在回调中使用,是否需要return
从then
回调中获得结果,甚至可以return
从外部函数中获得结果?所有这些问题甚至都没有出现在第一个片段中。虽然对于您的玩具示例可以轻松回答这些问题,但在具有更复杂和嵌套控制流的实际代码中可能并不那么容易。
所以你应该更喜欢更简洁和干净的。棒以await
用于一致性,避免then
在async function
小号1。
1:当然,规则总是有例外的。我会说在某些情况下您将使用或第二个回调时,使用承诺链进行错误处理会更干净。catch
then
在幕后,async/await 只是承诺。
也就是说,当你有一些看起来像这样的代码时:
const result = await myAsyncFunction();
console.log(result):
Run Code Online (Sandbox Code Playgroud)
这与编写完全相同:
myAsyncFunction().then(data => {
const result = data;
console.log(result);
});
Run Code Online (Sandbox Code Playgroud)
原因 - 你不应该混合 async/await 和.then
链 - 是因为它令人困惑。
最好只选择一种风格,并坚持下去。
当你选择一个时——你也可以选择 async/await——它更容易理解。
归档时间: |
|
查看次数: |
436 次 |
最近记录: |