添加链接
link之家
链接快照平台
  • 输入网页链接,自动生成快照
  • 标签化管理网页链接

I like the async await syntax, and I use it a lot with mongoose.

So in my project there is plenty of :

const user = await User.findOne({
    _id: req.params.id

Which works just as expected. However, in sonarqube, I have these errors : Refactor this redundant 'await' on a non-promise.

And the sonarqube rule i :

It is possible to use await on values which are not Promises, but it's useless and misleading. The point of await is to pause execution until the Promise's asynchronous code has run to completion. With anything other than a Promise, there's nothing to wait for.

This rule raises an issue when an awaited value is guaranteed not to be a Promise.

Noncompliant Code Example

let x = 42;
await x; // Noncompliant
  

Compliant Solution

let x = new Promise(resolve => resolve(42));
await x;
let y = p ? 42 : new Promise(resolve => resolve(42));
await y;

I am using mongo 4.0 and mongoose 5.3.1

Since I can use the .then, .catch syntax I thought that I was dealing with promise so how could I fix that ?

Answers

I do not know much about SonarQube. I just figured out SonarQube is tool to check the code quality and get that it required await only prefix with the promises and there mongoose fails even having .then.

Mongoose queries do not return "fully-fledged" promise even they have .then(). So in order to get "fully-fledged" promise you need to use .exec() function.

const user = await User.findOne({ _id: req.params.id }).exec()
   
Logo

MongoDB社区为您提供最前沿的新闻资讯和知识内容

更多推荐

  • 浏览量 21
  • 收藏 0
  • 0

所有评论(0)