等待MongoDB查询结果

时间:2018-10-29 08:21:38

标签: node.js mongodb promise mongodb-query bluebird

我一直在寻找较旧的答案,但是无法弄清楚如何针对我的特定用例进行设置,很多答案似乎都已过时。

Node.js控制台警告过不要使用Promise库,因此我尝试使用Bluebird(无济于事)。如果有其他解决方案,我可以解决,不必是Bluebird。

这是我的代码:

let shortInt;
count().then(result => shortInt = result).catch(err => console.log(err));
console.log("shortInt " + shortInt);
//doing some other stuff here

我需要等待结果的函数:

async function count() {
   let answer;
   await Url.findOne({}).sort({short_url:-1}).exec(function (err,ur) { if (err) return err; answer = ur.short_url });
   console.log("answer " + answer);
   return answer;
}

对于console.log(shortInt),我会得到“未定义”,并且在进行所有其他操作之后,始终会在最后打印console.log(answer)。

我需要更改什么,以便在继续进行其他操作之前先设置shortInt。

我设置了mongoose.Promise = require(“ bluebird”);不会收到过时的警告。

1 个答案:

答案 0 :(得分:2)

您的脚本实际上会在count()结果返回之前继续运行,Node在异步操作之前执行主线程。

您可以将代码移至解决承诺的范围。

count()
  .then(shortInt => {
    // we can access shortInt here
    // rest of code ...
  })
  .catch(err => console.log(err));