Javascript 使用mongodb数据库处理节点中的get请求数据

Javascript 使用mongodb数据库处理节点中的get请求数据,javascript,node.js,mongodb,mongoose,Javascript,Node.js,Mongodb,Mongoose,没有问题。。如何将mongoose查询与JSON响应同步?以下代码返回空值,因为查询稍后结束。哪种处理方式 router.route('/admin') .get(function (req, res ) { var country = []; var element = []; Country.find({}, function (err, data) { country = data; });

没有问题。。如何将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
        });         
    }); 

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库——这意味着它们仍然异步执行,但只有在所有函数的所有结果都可用时,才会返回完整的结果——这里对此进行了解释:


谢谢。您的解决方案是可行的,但我正在寻找一种很好的方法来处理这个场景,而链接引用仍然让我感到困惑。异步编程中最“好”的方法是什么(如果你没有注意到的话——欢迎来到异步编程的狂野和奇妙世界——我一开始也很难理解,特别是如果你来自像Java这样的“经典”同步语言的话;)-正在使用Promise-这是一种允许执行多个异步进程的设计模式-我已经使用jQuery进行了异步调用,在ajax调用中定义了异步参数。Width node我希望使用类似的方法来处理它。我将更冷静地看一看Promise模式。