设想 = 我正在缓慢但坚定地思考 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 领域的人进行描述。

有帮助吗?

解决方案

以下是我对你的问题的看法:

  1. request 参数用于访问属于云函数请求/调用一部分的所有内容,它包括传递的参数(request.params),在客户端上经过身份验证的用户(request.user)以及您可以在中了解的一些其他内容 文档. 。这 response 是让你把信息发回调用代码,你一般调用 response.success() 或者 response.error() 再次包含在响应中的可选字符串/对象/等 文档在这里.
  2. 这是创建实例的一种方法 User, ,因为它是一个特殊的内部类,所以命名为 _User 相反,与 _Role_Installation. 。它正在创建一个具有 ID 的用户实例,而不是创建一个新实例(在保存之前不会有 ID)。当您以这种方式创建对象时,您只需更改要更新的属性即可“修补”它。
  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 云函数,您将可以使用这两个对象: 要求 & 回复. 。请求基本上是 iOS 设备发送到服务器的内容,响应是服务器发送到 iOS 设备的内容。
  2. 不完全是这样。这就像创建一个子类 _用户.
  3. 将 Parse 对象类型视为数据库表,并将其实例视为行。这 set 将把“newColText”的值设置(derp)到属性/列“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