L. *_*ros 4 mongoose mongodb node.js promise sonarqube
我喜欢 async await 语法,并且我经常将它与 mongoose 一起使用。
所以在我的项目中有很多:
const user = await User.findOne({
_id: req.params.id
})
Run Code Online (Sandbox Code Playgroud)
这正如预期的那样工作。但是,在 sonarqube 中,我有以下错误:
Refactor this redundant 'await' on a non-promise.
和声纳规则 i :
可以对不是 Promises 的值使用 await,但它是无用且具有误导性的。await 的目的是暂停执行,直到 Promise 的异步代码运行完成。除了 Promise 之外,没有什么可等待的。
当保证等待的值不是 Promise 时,此规则会引发问题。
不合规的代码示例
let x = 42;
await x; // Noncompliant
Run Code Online (Sandbox Code Playgroud)
合规解决方案
let x = new Promise(resolve => resolve(42));
await x;
let y = p ? 42 : new Promise(resolve => resolve(42));
await y;
Run Code Online (Sandbox Code Playgroud)
我正在使用 mongo 4.0 和 mongoose 5.3.1
由于我可以使用.then,.catch语法,我认为我正在处理 promise,所以我该如何解决?
我不太了解SonarQube。我只是想出了SonarQube为工具来检查代码质量,并得到它所需的await只是前缀的promises,有mongoose失败,甚至有.then。
Mongoose 查询即使有.then(). 因此,为了获得“完全成熟”的承诺,您需要使用.exec()函数。
const user = await User.findOne({ _id: req.params.id }).exec()
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
699 次 |
| 最近记录: |