9

场景= 我正在缓慢但肯定地围绕 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 领域的人进行描述。

4

2 回答 2

11

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

  1. request参数用于访问作为对云函数的请求/调用的一部分的所有内容,它包括传递的参数 ( request.params)、在客户端上通过身份验证的用户 ( ) 以及您可以在文档request.user中了解的其他一些内容. 这是为了让您将信息发送回调用代码,您通常调用或使用响应中包含的可选字符串/对象/等,再次文档hereresponseresponse.success()response.error()
  2. 这是一种创建 a 实例的方法User,因为它是一个特殊的内部类,所以_User改为命名,与_Roleand相同_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);
});
于 2014-07-28T23:29:42.860 回答
3

我和你几乎在同一个地方,但这是我的想法:

  1. 不,这些是函数接收到的参数。当某些东西调用editUser云函数时,您将使用这两个对象:requestresponse。请求基本上是 iOS 设备发送给服务器的内容,响应是服务器将发送给 iOS 设备的内容。
  2. 不完全是。这就像创建_User的子类。
  3. 将 Parse 对象类型视为数据库表,将其实例视为行。会将“ setnewColText”的值设置(derp)为属性/列“new_col”。
  4. 不确定,从未使用过该功能,因为我不处理用户对象。但可能就是这样。
  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 } }];

于 2014-07-28T20:08:02.150 回答