我一直在寻找较旧的答案,但是无法弄清楚如何针对我的特定用例进行设置,很多答案似乎都已过时。
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”);不会收到过时的警告。
答案 0 :(得分:2)
您的脚本实际上会在count()
结果返回之前继续运行,Node在异步操作之前执行主线程。
您可以将代码移至解决承诺的范围。
count()
.then(shortInt => {
// we can access shortInt here
// rest of code ...
})
.catch(err => console.log(err));