我正在尝试使用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编码器,我只在移动设备上编码,所以我可能在做一些愚蠢的事情。任何帮助都会很棒。谢谢。
答案 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";
})
});