Parse Cloud Code 使用 Parse 3.0.0 定义
Parse Cloud Code Defines with Parse 3.0.0
我正在尝试使用 Parse 从云代码中的 Parse.Cloud.define 函数中获取 return 值。我正在使用 Parse 3.0.0,我可以从简单的云代码定义中获取 return 值,但不是复杂的。
我正在 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调试window中的值是
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" 云代码定义没有 returning 字符串 "good work" 当函数清楚地执行并按应有的方式发送电子邮件时。我已经阅读了 Parse 3.0.0 和 JS 2.0.0 指南,它们并没有很好地描述这应该如何与 Parse Cloud 定义一起工作。我不是 JS 编码员,我只在移动设备上编码,所以我可能在做一些愚蠢的事情。任何帮助都会很棒。谢谢。
你的iOS代码没有问题,问题出在云代码上,所以你需要更改云代码,因为它不一定不安全,但有缺陷。
问题是您将 Promise
嵌套在彼此内部而不是将它们链接在一起,因此单个嵌套 return 值在多个嵌套层中丢失。
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";
})
});
我正在尝试使用 Parse 从云代码中的 Parse.Cloud.define 函数中获取 return 值。我正在使用 Parse 3.0.0,我可以从简单的云代码定义中获取 return 值,但不是复杂的。
我正在 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调试window中的值是
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" 云代码定义没有 returning 字符串 "good work" 当函数清楚地执行并按应有的方式发送电子邮件时。我已经阅读了 Parse 3.0.0 和 JS 2.0.0 指南,它们并没有很好地描述这应该如何与 Parse Cloud 定义一起工作。我不是 JS 编码员,我只在移动设备上编码,所以我可能在做一些愚蠢的事情。任何帮助都会很棒。谢谢。
你的iOS代码没有问题,问题出在云代码上,所以你需要更改云代码,因为它不一定不安全,但有缺陷。
问题是您将 Promise
嵌套在彼此内部而不是将它们链接在一起,因此单个嵌套 return 值在多个嵌套层中丢失。
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";
})
});