1

私の課題は、最初のクエリの結果を 2 番目のクエリの入力として使用して、1 つのクエリを別のクエリの前に実行する必要があることです。

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");
        }
});

ご覧のとおり、2 番目のクエリでは、最初のクエリによって入力された objectIDArray が必要です。これを実行すると、両方のクエリが並行して発生しているように見えるため、2 番目のクエリで常に null の結果が得られます。いずれにせよ、私が望んでいたように、それらは順番に発生しません。最初のクエリの後に 2 番目のクエリを実行するにはどうすればよいですか? プロミスを使用しますか?

例を挙げていただけますか。ドキュメントの形がよくわかりませんでした

4

1 に答える 1

2

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を使用できます。

于 2013-11-05T17:07:19.587 に答える