2015-09-05 43 views
0

我想使用雲代碼獲取一批用戶對象。在收集對象將發送給客戶之前,他們必須採取一個唯一的號碼。 現在,它看起來像這樣雲代碼,在響應之前添加鍵值對的複雜查詢

Parse.Cloud.define("getUsers", function(request, response) 
{ 
    var query = new Parse.Query(Parse.User); 

    var mode = parseInt(request.params.mode); 
    var username = request.params.username; 
    var skip = parseInt(request.params.skip); 
    var limit = parseInt(request.params.limit); 

    if(mode==1) 
    { 
     query.notEqualTo("fbLogged",true) 
     .descending("score") 
     .notEqualTo("username",username) 
     .skip(skip) 
     .limit(limit); 

     query.find({ 
      success: function(objects) 
      { 
       var i = 0; 
       objects.forEach(function(item) 
       { 
        item["rank"]=skip+i; //setting a unique number (position based on score) 
       }); 

       response.success(objects); 
      }, 
      error: function(error) 
      { 
       response.error(error); 
      } 
     }); 
    } 
}); 

和我如何使用它的客戶端...

void Start() { 
    IDictionary<string, object> dict = new Dictionary<string, object>(); 
    dict.Add("username", "477698883"); 
    dict.Add("skip", "300"); 
    dict.Add("limit", "50"); 
    dict.Add("mode", "1"); 
    ParseCloud.CallFunctionAsync<IEnumerable<object>>("getUsers", dict).ContinueWith(t => 
    { 
     if(t.IsCanceled || t.IsFaulted) 
     { 
      foreach (var e in t.Exception.InnerExceptions) 
       Debug.LogError(e.Message); 
     } 
     else 
     { 
      var r = t.Result; 
      List<ParseUser> users = new List<ParseUser>(); 
      foreach(var o in r) 
      { 
       try { 
        ParseObject pu = (ParseObject)o; 

        foreach (var key in pu.Keys) 
         Debug.Log(key + " = " + pu[key]); 
       } 
       catch(Exception e) 
       { 
        Debug.LogError(e.Message); 
       } 
       break; 
      } 
     } 
    }); 
} 

正如你看到的我只顯示第一次收到的對象。 它給了我這個數據。 enter image description here

但是「排名」字段在哪裏?

回答

0

我剛找到解決方案。將通過response.success()發送給客戶端的每個ParseObject必須在發送之前保存在Parse中。 現在我的代碼看起來像這樣,它的工作原理

Parse.Cloud.define("getUsers", function(request, response) 
{ 
    var query = new Parse.Query(Parse.User); 

    var mode = parseInt(request.params.mode); 
    var username = request.params.username; 
    var skip = parseInt(request.params.skip); 
    var limit = parseInt(request.params.limit); 

    if(mode==1) 
    { 
     query.notEqualTo("fbLogged",true) 
     .descending("score") 
     .notEqualTo("username",username) 
     .skip(skip) 
     .limit(limit); 

     query.find({ 
      success: function(objects) 
      { 
       for(var i = 0; i<objects.length; i++) 
       { 
        objects[i].set("rank", skip+i); 
        objects[i].save(); 
       } 

       response.success(objects); 
      }, 
      error: function(error) 
      { 
       response.error(error); 
      } 
     }); 
    } 
});