Noob问题..如何将mongoose查询与JSON响应同步?以下代码返回空值,因为查询稍后结束。处理它的方法是什么?
router.route('/admin')
.get(function (req, res ) {
var country = [];
var element = [];
Country.find({}, function (err, data) {
country = data;
});
Items.find({}, function (err, data) {
element = data;
});
res.json({
countries: country,
elements: element
});
});
答案 0 :(得分:2)
country.find和Items.find是异步执行的 - 并且同时运行。 您需要将它们嵌套在回调函数中以遵循异步执行模式 - 这样您就可以确保它们是同步执行的。所以你的代码需要看起来像这样:
Country.find({}, function (err, data) {
country = data;
Items.find({}, function (err, data) {
element = data;
res.json({
countries: country,
elements: element
});
});
});
更高级且可能更好的方法是使用promise库 - 这意味着它们仍然是异步执行的,但只有在所有函数的所有结果都可用时才会返回完整的结果 - 这将在下面解释:
Executing several mongoose queries: how to use promises instead?