等待 MongoDB 个查询结果

Waiting for MongoDB query result

我一直在搜索较早的答案,但无法弄清楚如何针对我的特定用例进行设置,而且许多答案似乎已过时。

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),我得到 'undefined',并且 console.log(answer) 总是在最后打印,在所有//做其他事情之后。

我需要更改什么以便在我继续//做其他事情之前设置 shortInt。

我设置了 mongoose.Promise = require("bluebird");不会收到弃用警告。

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

您可以将您的代码移动到解析承诺的范围内。

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