2015-04-20 5 views
1

Я написал немного облачного кода, который выполняется после сохранения каждого пользователя. Внутри я хотел бы добавить пользователя к двум ролям: Alpha и Free, но этот код только успешно добавляет новых пользователей в роль Alpha; У свободной роли нет данных в таблице users. Есть ли способ в Parse назначить пользователям несколько ролей?Как назначить несколько ролей одному пользователю в Parse?

Вот мой код облака.

Parse.Cloud.afterSave(Parse.User, function(request, response) { 
    Parse.Cloud.useMasterKey(); // grant administrative access to write to roles 
    var user = request.object; 

    query = new Parse.Query(Parse.Role); 
    query.equalTo("name", "Alpha"); 
    query.first ({ 
     success: function(object) { 
      object.relation("users").add(user); 
      object.save(); 
      response.success("The user has been authorized."); 
     }, 
     error: function(error) { 
      response.error("User authorization failed!"); 
     } 
    }); 

    query = new Parse.Query(Parse.Role); 
    query.equalTo("name", "Free"); 
    query.first ({ 
     success: function(object) { 
      object.relation("users").add(user); 
      object.save(); 
      response.success("The user has been authorized."); 
     }, 
     error: function(error) { 
      response.error("User authorization failed!"); 
     } 
    }); 
}); 

ответ

1

Проблема заключается в последовательности. Нам нужны все запросы и сохраняются до завершения вызова response.success(). Как и сейчас, время действий в коде не является детерминированным. Очистите его, используя обещания, возвращаемые parse sdk ...

Parse.Cloud.afterSave(Parse.User, function(request, response) { 
    Parse.Cloud.useMasterKey(); // grant administrative access to write to roles 
    var user = request.object; 
    query = new Parse.Query(Parse.Role); 
    query.equalTo("name", "Alpha"); 
    query.first().then(function(object) { 
     object.relation("users").add(user); 
     return object.save(); 
    }).then(function() { 
     query = new Parse.Query(Parse.Role); 
     query.equalTo("name", "Free"); 
     return query.first(); 
    }).then(function(object) { 
     object.relation("users").add(user); 
     return object.save(); 
    }).then(function() { 
     response.success("The user has been authorized."); 
    }, function(error) { 
     response.error("error: " + error.message); 
    }); 
}); 
+0

Большое вам спасибо! Не могу поверить, что я об этом не думал. Ваше решение работает отлично. – solarbabies

Смежные вопросы