Разбор 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 ответа

Решение

Вот мой взгляд на ваши вопросы:

  1. request Параметр для вас, чтобы получить доступ ко всему, что является частью запроса / вызова к вашей облачной функции, он включает в себя переданные параметры (request.params) Пользователь, который аутентифицирован на клиенте (request.user) и некоторые другие вещи, о которых вы можете узнать в документации. response для вас, чтобы отправить информацию обратно на телефонный код, вы обычно звоните response.success() или же response.error() с необязательной строкой / объектом /etc, которая включается в ответ, опять документация здесь.
  2. Это способ создания экземпляра User, который, потому что это специальный внутренний класс, назван _User вместо того же _Role а также _Installation, Это создание экземпляра пользователя с идентификатором, а не создание нового (который не будет иметь идентификатора, пока не будет сохранен). Когда вы создаете объект таким способом, вы можете "исправить" его, просто изменив свойства, которые вы хотите обновить.
  3. Снова, посмотрите на документацию или пример, первый параметр - это имя столбца (оно будет создано, если его не существует), второе значение - это то, что вы хотите, чтобы этот столбец был установлен.
  4. Ты должен сделать Parse.Cloud.useMasterKey() когда вам нужно сделать что-то, что пользователь, вошедший в клиент, не имеет разрешения на это. Это означает "игнорировать всю безопасность, я знаю, что я делаю".
  5. Вы видите цепочку обещаний, каждый шаг в цепочке позволяет передавать обработчик "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);
});

Я почти в том же месте, что и вы, но вот мои мысли:

  1. Нет, это параметры, полученные функцией. Когда что-то зовет editUser Облачная функция, вы будете использовать эти два объекта: запрос и ответ. По сути, запрос - это то, что устройство iOS отправляет на сервер, а ответ - то, что сервер отправляет на устройство iOS.
  2. Не совсем так. Это похоже на создание подкласса _User.
  3. Думайте о типах объектов Parse как о таблице базы данных, а о ее экземплярах - как строках. set установит (сумасшедший) значение 'newColText' для атрибута / столбца 'new_col'.
  4. Не уверен, никогда не использовал эту функцию, так как я не обрабатываю объекты User. Но может быть и так.
  5. В значительной степени это. Но это больше похоже на (псевдокод, смешивание 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 } }];

Другие вопросы по тегам