Вопрос

Сценарий = Я медленно, но верно разбираюсь в том, что происходит с функциями облачного кода 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»), а внутри функции облачного кода я собираюсь назвать это «запросом»?Вот что здесь происходит?

вопрос 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.

Это было полезно?

Решение

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

  1. А request Параметр предназначен для доступа ко всему, что является частью запроса/вызова вашей облачной функции, он включает в себя переданные параметры (request.params), Пользователь, прошедший аутентификацию на клиенте (request.user) и некоторые другие вещи, о которых вы можете узнать в документацияresponse предназначен для отправки информации обратно на вызывающий код, вы обычно звоните response.success() или response.error() с дополнительной строкой/объектом/и т. д., которая снова включается в ответ документация здесь.
  2. Это способ создания экземпляра User, который, поскольку это специальный внутренний класс, называется _User вместо этого то же самое с _Role и _Installation.Он создает экземпляр пользователя с идентификатором, а не создает новый (у которого не будет идентификатора до тех пор, пока он не будет сохранен).Создавая объект таким образом, вы можете «исправить» его, просто изменив свойства, которые хотите обновить.
  3. Опять же, посмотрите на документация или пример, первый параметр — это имя столбца (он будет создан, если он не существует), второе значение — это то, что вы хотите установить для этого столбца.
  4. Ты должен сделать Parse.Cloud.useMasterKey() когда вам нужно сделать что-то, на что пользователь, вошедший в клиент, не имеет разрешения.Это означает «игнорируйте все меры безопасности, я знаю, что делаю».
  5. Вы видите цепочку обещаний, каждый шаг в которой позволяет вам передать обработчик «успеха» и необязательный обработчик «ошибки».Есть несколько замечательных документация.Это очень удобно, когда вы хотите сделать несколько вещей по порядку, например.

Образец кода:

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 Cloud, вам понадобятся эти два объекта: запрос & ответ.По сути, запрос — это то, что устройство iOS отправляет на сервер, а ответ — это то, что сервер отправит на устройство iOS.
  2. Не совсем это.Это похоже на создание подкласса _Пользователь.
  3. Думайте о типах объектов Parse как о таблице базы данных, а об их экземплярах как о строках.А set установит (derp) значение «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 } }];

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top