解析云代码使用解析3.0.0定义

时间:2018-10-01 16:07:48

标签: javascript objective-c parse-platform parse-cloud

我正在尝试使用Parse从云代码中的Parse.Cloud.define函数返回值。我正在使用Parse 3.0.0,我可以让它从简单的云代码定义而不是复杂的云代码定义中返回值。

我正在用Objective-C编写客户端iOS。

这是云代码功能(我不在乎这是否不安全,我没有更改它)

Parse.Cloud.define("doStuff", (request) => {
    const query = new Parse.Query(Parse.User);
    query.equalTo("username", request.params.username);
    query.first({useMasterKey:true})
    .then((results) => {
        Parse.User.requestPasswordReset(results.get("email"))
        .then(() => {
            return "good work";
        }).catch((error) => {
        });
    })
    .catch((error) =>  {
    });
});

这很好,它可以通过使用“用户名”字段按预期方式将电子邮件发送给用户。

在iOS中,我这样称呼它:

[PFCloud callFunctionInBackground:@"doStuff" withParameters:@{@"username" : cleanEntryData} block:^(NSString * object, NSError * error) {
 if (!error) {
NSLog(@"success %@", object);
} else {
 NSLog(@"error %@", error);
}
}];

此呼叫在iOS中有效,并且电子邮件已成功发送给用户以重置密码。但是,这就是问题所在。

当我打电话

 NSLog(@"success %@", object);

Xcode调试窗口中的值为

success (null)

我希望是

success good work

当我这样定义一个简单的云代码时:

Parse.Cloud.define("testing", (req) => {
     return "very good";
});

在iOS上是这样的

 [PFCloud callFunctionInBackground:@"testing" withParameters:@{@"nothing" : @"nothing"} block:^(NSString * object, NSError * error) {
                                    if (!error) {
                                        NSLog(@"success %@", object);

                                    } else {

                                    }
                                }];

然后我在需要的Xcode调试器中得到结果

success very good

我不知道为什么当函数清楚地执行并按需发送电子邮件时,“ doStuff”云代码定义为什么不返回字符串“ good work”。我已经阅读了Parse 3.0.0和JS 2.0.0指南,但它们对如何与Parse Cloud定义一起使用的描述不是很明确。我不是JS编码器,我只在移动设备上编码,所以我可能在做一些愚蠢的事情。任何帮助都会很棒。谢谢。

1 个答案:

答案 0 :(得分:1)

您的iOS代码中没有问题,问题出在云代码中,因此您需要更改云代码,因为它不一定安全,而是有缺陷的。

问题在于,您将Promise彼此嵌套而不是将它们链接在一起,因此单个嵌套的返回值在多个嵌套层中丢失了。

Parse.Cloud.define("doStuff", (request) => {
    const query = new Parse.Query(Parse.User);
    query.equalTo("username", request.params.username);
    return query.first({useMasterKey:true})
    .then((results) => {
        return Parse.User.requestPasswordReset(results.get("email"));
    }).then(() => {
        return "good work";
    })
});