我的挑战是我需要在另一个查询之前执行一个查询,使用第一个查询的结果作为第二个查询中的输入。
var adList = [];
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
objectIDArray.push(results[i].id);
}
},
error: function(){
response.error("failed");
}
});
//second query
var locations = Parse.Object.extend("Locations");
query2.include("locationID");
query2.containedIn("campaignIDString", objectIDArray);
query2.find({
success: function(results){
locations = results2[0].get("locationID");
adList.push(locations.get("CITY"));
adList.push(locations.get("PROVINCE"));
adList.push(locations.get("STORE_ADDRESS"));
response.success(adList);
}, error: function(){
response.error("failed to get a response");
}
});
如您所见,在第二个查询中,我需要objectIDArray,它由第一个查询填充。如果我运行这个,我总是在第二个查询中得到null结果,因为两个查询似乎并行发生。无论如何,他们不会像我希望的那样顺序发生。 如何在第一个查询之后运行第二个查询?使用承诺?
你能给我一个例子,我不能很好地理解文件
答案 0 :(得分:2)
将第二个查询移到第一个查询的完成块中:
var adList = [];
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
objectIDArray.push(results[i].id);
}
//second query
var locations = Parse.Object.extend("Locations");
query2.include("locationID");
query2.containedIn("campaignIDString", objectIDArray);
query2.find({
success: function(results){
locations = results2[0].get("locationID");
adList.push(locations.get("CITY"));
adList.push(locations.get("PROVINCE"));
adList.push(locations.get("STORE_ADDRESS"));
response.success(adList);
}, error: function(){
response.error("failed to get a response");
}
});
},
error: function(){
response.error("failed");
}
});
或者您可以使用Promises。