Разбор iOS SDK: Понимание облачного кода
Сценарий = Я медленно, но верно сосредотачиваюсь на том, что происходит с функциями облачного кода Parse. Мне просто нужна помощь от тех, кто хотел бы ответить на несколько коротких, относительно простых вопросов о том, что происходит в некоторых примерах функций облачного кода.
Код, который я буду использовать в этом примере ниже
1) облачный код
Parse.Cloud.define('editUser', function(request, response) {
var userId = request.params.userId,
newColText = request.params.newColText;
var User = Parse.Object.extend('_User'),
user = new User({ objectId: userId });
user.set('new_col', newColText);
Parse.Cloud.useMasterKey();
user.save().then(function(user) {
response.success(user);
}, function(error) {
response.error(error)
});
});
2) звонил с iOS
[PFCloud callFunction:@"editUser" withParameters:@{
@"userId": @"someuseridhere",
@"newColText": @"new text!"
}];
Этот код был взят отсюда
Вопрос 1 =
(request, response)
Я смущен тем, что это. Это похоже на приведение типов в iOS, где я говорю (в вызове iOS), что я хочу передать NSString в эту функцию ("userId"), а внутри функции облачного кода я назову ее "request"? Это то, что здесь происходит?
Вопрос 2 =
Parse.Object.extend('_User')
Захватывает ли это класс "Пользователь" из базы данных Parse, чтобы сорта "PFObject" могли обновить его, создав нового "пользователя" в строке под ним?
Это как...
PFObject *userObject = [PFObject objectWithClassName:@"User"]?
Вопрос 3 =
user.set('new_col', newColText)
Это, очевидно, "устанавливает" значения, которые будут сохранены в PFUser (~ я думаю). Я знаю, что переменная "newColText" - это текст, который нужно установить, но что такое "new_col"? Единственное, о чем я могу думать, это то, что это устанавливает имя нового столбца в базе данных любого типа, который передается через "запрос"?
Это как...
[[PFUser currentUser] setObject: forKey:]
Вопрос 4 =
Parse.Cloud.useMasterKey()
Не вдаваясь в технические подробности, это все, что мне нужно набрать, прежде чем я смогу редактировать объект "Пользователь" другого пользователя?
Вопрос 5 =
user.save().then(function(user) {
response.success(user);
}
Это как...
[user saveInBackgroundWithBlock:]?
и если да, то
function(error) {
response.error(error)
просто установить, что происходит, если в saveInBackgroundWithBlock есть ошибка?
Пожалуйста, имейте в виду, я знаю iOS - не JavaScript. Поэтому постарайтесь быть как можно более понятным тому, кто понимает сферу Apple.
2 ответа
Вот мой взгляд на ваши вопросы:
request
Параметр для вас, чтобы получить доступ ко всему, что является частью запроса / вызова к вашей облачной функции, он включает в себя переданные параметры (request.params
) Пользователь, который аутентифицирован на клиенте (request.user
) и некоторые другие вещи, о которых вы можете узнать в документации.response
для вас, чтобы отправить информацию обратно на телефонный код, вы обычно звонитеresponse.success()
или жеresponse.error()
с необязательной строкой / объектом /etc, которая включается в ответ, опять документация здесь.- Это способ создания экземпляра
User
, который, потому что это специальный внутренний класс, назван_User
вместо того же_Role
а также_Installation
, Это создание экземпляра пользователя с идентификатором, а не создание нового (который не будет иметь идентификатора, пока не будет сохранен). Когда вы создаете объект таким способом, вы можете "исправить" его, просто изменив свойства, которые вы хотите обновить. - Снова, посмотрите на документацию или пример, первый параметр - это имя столбца (оно будет создано, если его не существует), второе значение - это то, что вы хотите, чтобы этот столбец был установлен.
- Ты должен сделать
Parse.Cloud.useMasterKey()
когда вам нужно сделать что-то, что пользователь, вошедший в клиент, не имеет разрешения на это. Это означает "игнорировать всю безопасность, я знаю, что я делаю". - Вы видите цепочку обещаний, каждый шаг в цепочке позволяет передавать обработчик "success" и необязательный обработчик "error". Есть отличная документация. Это очень удобно, когда вы хотите сделать несколько вещей по порядку, например,
Образец кода:
var post = new Parse.Object('Post');
var comment = new Parse.Object('Comment');
// assume we set a bunch of properties on the post and comment here
post.save().then(function() {
// we know the post is saved, so now we can reference it from our comment
comment.set('post', post);
// return the comment save promise, so we can keep chaining
return comment.save();
}).then(function() {
// success!
response.success();
}, function(error) {
// uh oh!
// this catches errors anywhere in the chain
response.error(error);
});
Я почти в том же месте, что и вы, но вот мои мысли:
- Нет, это параметры, полученные функцией. Когда что-то зовет
editUser
Облачная функция, вы будете использовать эти два объекта: запрос и ответ. По сути, запрос - это то, что устройство iOS отправляет на сервер, а ответ - то, что сервер отправляет на устройство iOS. - Не совсем так. Это похоже на создание подкласса _User.
- Думайте о типах объектов Parse как о таблице базы данных, а о ее экземплярах - как строках.
set
установит (сумасшедший) значение 'newColText' для атрибута / столбца 'new_col'. - Не уверен, никогда не использовал эту функцию, так как я не обрабатываю объекты User. Но может быть и так.
- В значительной степени это. Но это больше похоже на (псевдокод, смешивание JS с Obj-C):
[user saveInBackgroundWithBlock:^(BOOL succeeded, NSError *error){
if(error){
response.error(error); // mark the function as failed and return the error object to the iOS device
}
else{
response.success(user); // mark the function call as successful and return the user object to the iOS device
}
}];