2015-02-23 78 views
1

我正在使用解析云代码来托管Web应用程序,但我在尝试获取关系查询时遇到问题。我试过了Coderwall https://coderwall.com/p/n22mqq/including-relational-data-in-a-query-parse-com的一个例子,但我不确定如何在尝试呈现结果之前收集查询的结果。解析云代码关系查询的返回结果

function queryProducts(limit) { 

    var post = Parse.Object.extend("Post"); 
    var query = new Parse.Query(post); 
    query.limit(limit); 

    var data = new Array(); 

    query.find().then(function (posts) { 
    var cb = _.after(posts.length, function() { 
     console.log("after"+ data); 
     return data; 
    }); 
    _.each(posts, function (post) { 
     var images = post.relation("images"); 
     images.query().find().then(function (images) { 
     data.push(post); 
     cb(); 
     }); 
    }); 
    }); 
} 

app.get('/', function (req, res) { 
    results = queryProducts(10); 
    res.render('index', { products: results }); 
}); 
+0

'queryProducts'是异步的。你应该更熟悉承诺 – Bergi 2015-02-23 23:19:51

+0

我认为你网站的文章给出了不好的建议。如果相关数据足够大以保证关系,那么它可能太大而无法一次全部获取。这篇文章关于如何取回的想法是错综复杂的。 Promise.when()所有相关的查询都会在几行中做同样的工作。 – danh 2015-02-24 00:45:10

回答

1

要回答我的问题,得到的答案竟是,最终很容易的,如果你对在解析文档https://parse.com/docs/js_guide#promises-parallel平行承诺读了什么,例如错过是函数传递到最终则()可以接受一系列结果,例如

Parse.Promise 
    .when([query0.find(), query1.find()]) 
    .then(function (query0Results, query1Results) { 
     res.render('index', 
      { 
       query0Results: query0Results, 
       query1Results: query1Results, 
      } 
     ); 
});