解析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 数据库中获取“User”类,以便某种“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
. 。它正在创建一个具有 ID 的用户实例,而不是创建一个新实例(在保存之前不会有 ID)。当您以这种方式创建对象时,您只需更改要更新的属性即可“修补”它。 - 再次,看看 文档 或者 一个例子, ,第一个参数是列名(如果不存在则创建),第二个值是您希望该列设置的值。
- 你必须做
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
云函数,您将可以使用这两个对象: 要求 & 回复. 。请求基本上是 iOS 设备发送到服务器的内容,响应是服务器发送到 iOS 设备的内容。 - 不完全是这样。这就像创建一个子类 _用户.
- 将 Parse 对象类型视为数据库表,并将其实例视为行。这
set
将把“newColText”的值设置(derp)到属性/列“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
}
}];