Разобрать iOS SDK:Понимание облачного кода
-
20-12-2019 - |
Вопрос
Сценарий = Я медленно, но верно разбираюсь в том, что происходит с функциями облачного кода 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.
Решение
Вот мой взгляд на ваши вопросы:
- А
request
Параметр предназначен для доступа ко всему, что является частью запроса/вызова вашей облачной функции, он включает в себя переданные параметры (request.params
), Пользователь, прошедший аутентификацию на клиенте (request.user
) и некоторые другие вещи, о которых вы можете узнать в документация.Аresponse
предназначен для отправки информации обратно на вызывающий код, вы обычно звонитеresponse.success()
илиresponse.error()
с дополнительной строкой/объектом/и т. д., которая снова включается в ответ документация здесь. - Это способ создания экземпляра
User
, который, поскольку это специальный внутренний класс, называется_User
вместо этого то же самое с_Role
и_Installation
.Он создает экземпляр пользователя с идентификатором, а не создает новый (у которого не будет идентификатора до тех пор, пока он не будет сохранен).Создавая объект таким образом, вы можете «исправить» его, просто изменив свойства, которые хотите обновить. - Опять же, посмотрите на документация или пример, первый параметр — это имя столбца (он будет создан, если он не существует), второе значение — это то, что вы хотите установить для этого столбца.
- Ты должен сделать
Parse.Cloud.useMasterKey()
когда вам нужно сделать что-то, на что пользователь, вошедший в клиент, не имеет разрешения.Это означает «игнорируйте все меры безопасности, я знаю, что делаю». - Вы видите цепочку обещаний, каждый шаг в которой позволяет вам передать обработчик «успеха» и необязательный обработчик «ошибки».Есть несколько замечательных документация.Это очень удобно, когда вы хотите сделать несколько вещей по порядку, например.
Образец кода:
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
Cloud, вам понадобятся эти два объекта: запрос & ответ.По сути, запрос — это то, что устройство iOS отправляет на сервер, а ответ — это то, что сервер отправит на устройство iOS. - Не совсем это.Это похоже на создание подкласса _Пользователь.
- Думайте о типах объектов Parse как о таблице базы данных, а об их экземплярах как о строках.А
set
установит (derp) значение «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
}
}];