2016-01-24 5 views
0

Я пытаюсь понять облачный код Parse.com, но это очень сложно. Моя проблема заключается в том, что я хочу переписать запрос, который манипулирует массив в облаке кода (JavaScript)Parse - Obj-C to Cloud Code

Вот некоторые из кода

PFQuery * quer = [PFQuery queryWithClassName:@"Spel"]; 
NSString * playerID = [[PFUser currentUser] objectForKey:@"fbid"]; 
[quer whereKey:@"lobby" containsAllObjectsInArray:@[playerID]]; 
[quer findObjectsInBackgroundWithBlock:^(NSArray * _Nullable objects, NSError * _Nullable error) { 
    for (PFObject * obj in objects) { 
     if (!error) { 


     NSMutableArray * ready = [[obj objectForKey:@"ready"] mutableCopy]; 
     if (![ready containsObject:[[PFUser currentUser] objectForKey:@"fbid"]]) { 
       [ready addObject:[[PFUser currentUser] objectForKey:@"fbid"]]; 
     } 

     [obj setObject:ready forKey:@"ready"]; 
     [obj saveInBackgroundWithBlock:^(BOOL succeeded, NSError * _Nullable error) { 
      if (succeeded) { 
      //success} 

Я хотел бы иметь тот же самый код, выполняемый в облаке кода, поскольку это многопользовательская игра, и люди одновременно нажимают кнопку, возникает проблема, при которой массив управляется с ошибкой.

Какая-то душа, кто знает, как это сделать? Так как он чувствует себя немного более сложным, чем просто сохранение нормального объекта с облаком кода

Уважением, Martin

ответ

1

Похоже, что код находит объекты SPEL где текущего пользователя «fbid» находится в положении «лобби SPEL в "массив. Для каждого найденного добавьте «fbid» пользователя в свойство «готов» Spel.

Вы бы сказали, что в JS следующим образом:

var _ = require('underscore'); 

Parse.Cloud.define("myCloudFunction", function(request, response) { 
    var fbid = request.user.get("fbid"); 
    var query = new Parse.Query("Spel"); 
    query.equalTo("lobby", fbid); 
    query.find().then(function(results) { 
     _.each(results, function(spel) { 
      spel.addUnique("ready", fbid); 
     }); 
     return Parse.Object.saveAll(results); 
    }).then(function(result) { 
     response.success(result); 
    }, function(error) { 
     response.error(error); 
    }); 
});