这些调用有什么区别,为什么在第一种情况下我的控制台记录“未定义”,而在第二种情况下我得到了正确的答案(一个整数)。
调用 count() 时 - 未定义。
function count() {
let answer;
Url.findOne({}).sort({short_url:-1}).exec(function (err,ur) { if (err) return err; answer = ur.short_url });
console.log(answer);
}
调用 count() 时 - 一个整数。
function count() {
Url.findOne({}).sort({short_url:-1}).exec(function (err,ur) { if (err) return err; console.log(ur.short_url) });
}
一般来说,我希望实现这样的调用(count())将返回“short_url”的最高值。
最佳答案
findOne
调用是异步的。因此,在 findOnde
语句返回之前调用 console.log
语句。
第二个是您正在使用回调。这意味着当 findOne 函数完成时调用此函数。这次它会起作用的。
但作为最佳实践,如果您使用 ES6 javascript,我建议您使用 async
和 await
。
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);
}
关于javascript - Mongoose 中的 Find() 调用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53004240/