我想查找带有最新“sorting_index”字段的文档。 我这样试试:
var sorting_index = -1;
this.findOne().sort({'sorting_index': -1}).exec(function(err, doc) {
if (err) return;
sorting_index = doc['sorting_index']; // sorting_index == 10
});
console.log(sorting_index); // sorting_index == -1
问题是回调是异步的。如何同步?
答案 0 :(得分:7)
简短回答 - 你不能。
如果您希望代码同步,则应考虑使用其他工具而不是node.js
。
node.js中的所有I / O操作都是异步的,因此如果您想使用node.js,那么您应该学习如何处理异步代码:
this.findOne().sort({sorting_index: -1}).exec(function(err, doc) {
if (err) throw err;
var sorting_index = doc['sorting_index'];
console.log(sorting_index); // sorting_index == 10
});
还有许多有用的工具可以简化异步代码:async.js,promises,ES6生成器(node.js 11.x)等。
答案 1 :(得分:0)
尝试使用nvm
将版本提升到Node 8+或更高版本,因为它非常棒。当你到达时,转到最新的Node LTS。
尝试类似的方法,让您的生活更轻松,确保将您正在使用的功能标记为async
(假设您在课堂上)并使用await
你需要获得通常与Promise链接一起使用的实际内容。
async findSortIndex() {
try {
const doc = await this.findOne().sort({ sorting_index: -1 })
console.log(doc.sorting_index)
} catch(err) {
return Promise.reject(err)
}
}
答案 2 :(得分:0)
请谨慎使用await等类似的链接方法。
我有一段类似的代码
const DbModelInstances = await DbModelInstance.find().sort("-dateAdded");
出问题了,由于同步问题,我的单元测试搞砸了。我删除了排序语句,它工作正常。 我只是今天早上才发现它,所以我还没有一个详尽的解释,但是当我遇到这篇文章时,我想我会提到它,以防万一其他人遇到了同样的问题。