9

クラウド コードでネストされたクエリを実行することは可能ですか?

みたいなことができるようになりたい

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

これをやってみましたが、内部クエリは実行されません。なんで?

4

3 に答える 3

0

次の答えをまとめることができました。これは私にとってはうまくいきます。並列プロミスの parse.com ドキュメント ガイドラインに従います。2 つの promise 配列を作成します。それらの 1 つは、内部ループの promise 配列として機能します。もう 1 つは、外側のループの promise 配列として機能します。

Parse.Cloud.define("getFriends", function (request, response) {
  var _ = require('underscore.js');
  var queryFields = request.params.queryFields;
  //var ClassToSearch = Parse.Object.extend("User");

  var promises = [];
  var promises2 = [];
  var FinalResult = [];
 var asyncFunc = function (userIDArray) {
    _.each(queryFields, function (queryField) {
      var query = new Parse.Query(Parse.User);
      query.equalTo("yourColumnName", queryField);
      promises.push(
        query.find().then(function (results) {
       _.each(results, function (resultObj) { 
        //nested query
        var ClassToSearch = Parse.Object.extend("AnotherColumn");
        var query2 = new Parse.Query(ClassToSearch);
        query2.equalTo("yourColumnName", resultObj);
        promises2.push(        
          query2.first().then(function (itinerary) {
          FinalResults.push(itinerary);
        }));

      });
      return Parse.Promise.when(promises2);
    })
          )
    });
    // Return a new promise that is resolved when all of the requests are done 
    return Parse.Promise.when(promises);
  };
  asyncFunc(queryFields).then(function () {
    console.log("all http requests were made");
    response.success(FinalResults);
  }, function (error) {
    console.log("there was some error");
  });
});
于 2015-10-04T05:43:44.933 に答える