javascript - 解析iOS SDK : Understanding Cloud Code

标签 javascript ios objective-c parse-platform parse-framework

场景 = 我正在缓慢但肯定地思考 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!"

}];

此代码取自 here

问题 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) 以及您可以在 documentation 中了解的其他一些内容. response 是给你发回信息给调用代码的,一般调用response.success() 或者 response.error()一个可选的字符串/对象/等,再次包含在响应中 documentation here .
  2. 这是一种创建User实例的方法,因为它是一个特殊的内部类,所以被命名为_User,与_Role相同> 和 _Installation。它正在创建一个具有 ID 的用户实例,而不是创建一个新实例(在保存之前不会有 ID)。当您以这种方式创建对象时,您只需更改要更新的属性即可“修补”它。
  3. 再次查看 documentationan example ,第一个参数是列名(如果不存在则创建),第二个值是您希望该列设置的值。
  4. 当您需要执行登录到客户端的用户无权执行的操作时,您必须执行 Parse.Cloud.useMasterKey()。这意味着“忽略所有安全性,我知道我在做什么”。
  5. 您将看到一个 promise 链,链中的每个步骤都允许您传入一个“成功”处理程序和一个可选的“错误”处理程序。有一些很棒的documentation .当您想按顺序做几件事时,它非常方便,例如

示例代码:

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);
});

关于javascript - 解析iOS SDK : Understanding Cloud Code,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25003280/

相关文章:

ios - Quickblox API 因无法识别的选择器而快速崩溃

ios - 设备旋转动画在 iOS 10 中不起作用

ios - 如何使用systemMusicPlayer获取当前播放项目的播放列表?

Javascript 数组分组

javascript - C# Selenium 访问浏览器日志

javascript - 在移动设备中制作 Bootstrap 导航,从左侧展开而不是下拉。

javascript - 检测 HTML 视频自动播放预防

ios - 完全可见时在 UITableViewCell 上播放视频

iphone - 如何在没有预处理器的情况下创建在类中访问的全局 CGFloat

iphone - 在 uitableviewcells 问题中添加 uitableview?