Aks*_*wal 9 javascript parse-platform
是否可以在云代码中执行嵌套查询?
我希望能够做类似的事情
var adList = [];
var query2 = new Parse.Query("QR");
var query = new Parse.Query("Campaigns");
query.equalTo("isFeatured", true);
query.find({
success: function(results) {
for (var i=0; i<results.length; i++){
var ad = [];
ad.push(results[i].get("Type")); //Adds "Type" to the ad array
ad.push(results[i].id); //gets the objectID and appends it to the arrayy
//second INNER QUERY
query2.equalTo("abc", true);
adList.push(ad);
query2.first({
success: function(results){
adList.push(5);
},
error: function(){
response.error("inner fail");
}
});
}
response.success(adList); //adds all ad arrays to adList array
},
error: function(){
response.error("failed");
}
});
Run Code Online (Sandbox Code Playgroud)
我试过这样做,但内部查询永远不会执行.为什么?
Mar*_*hii 14
第二个查询是异步的,因此将其包装在一个for将无法正常工作.
response.success在第二个查询完成之前被触发,因此您在实际等待结果之前返回.我会告诉你进入response.success第二个success回调,query2但由于你在一个内部同步运行异步操作,for因此你将在第一个回复中发送响应success.
不要在循环内运行异步操作.它不起作用.
我不确定你要在这里完成什么,但是Query如果你想做出与结果一样多的查询,你将不得不为每个调用实例化一个新的.
同样,我不确定你究竟想要做什么,但是这里有一种你可以这样做的方式:
var adList = [];
var query = new Parse.Query("Campaigns");
query.equalTo("isFeatured", true);
query.find({
success: function(results) {
var queries = [];
for (var i=0; i<results.length; i++){
var query2 = new Parse.Query("QR");
query2.equalTo("abc",true);
var ad = [];
ad.push(results[i].get("Type"));
ad.push(results[i].id);
adList.push(ad);
queries.push(query2);
}
var totalLength = results.length;
function makeQueries(qs){
qs.shift().first({
success: function(currentResult) {
// do stuff with currentResult
if(qs.length){
makeQueries(qs);
} else {
console.log('We successfully made ' + totalLength + ' queries')
// we are done with the queries
response.success(adList);
}
},
error: function() {
response.error('Error in inner queries nº' + totalLength - qs.length)
}
});
}
makeQueries(queries);
},
error: function(){
response.error("failed");
}
});
Run Code Online (Sandbox Code Playgroud)
请记住,Parse Cloud Code允许您运行aprox 5/7秒的代码,如果您有很多,这可能会非常慢results.顺便说一句,看看Parse的matchesQuery方法.
从他们的文档中获取的示例:
var Post = Parse.Object.extend("Post");
var Comment = Parse.Object.extend("Comment");
var innerQuery = new Parse.Query(Post);
innerQuery.exists("image");
var query = new Parse.Query(Comment);
query.matchesQuery("post", innerQuery);
query.find({
success: function(comments) {
// comments now contains the comments for posts with images.
}
});
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
7312 次 |
| 最近记录: |