Parse Cloud Code определяет с помощью Parse 3.0.0
Я пытаюсь вернуть значения из функций Parse.Cloud.define в облачном коде, используя Parse. Я использую Parse 3.0.0 и могу заставить его возвращать значения из простых облачных кодов, но не сложных.
Я кодирую iOS на стороне клиента в Objective-C.
Вот функция облачного кода (мне все равно, если это небезопасно, я не изменяю ее)
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" не возвращает строку "хорошая работа", когда функция четко выполняет и отправляет электронное письмо, как и должно быть. Я прочитал руководства по Parse 3.0.0 и JS 2.0.0, и они не очень описывают, как это должно работать с определениями Parse Cloud. Я не JS-кодер, я пишу код только на мобильных устройствах, так что, вероятно, я делаю глупости. Любая помощь будет отличной. Благодарю.
1 ответ
В вашем iOS-коде нет проблем, проблема заключается в облачном коде, поэтому вам нужно изменить облачный код, поскольку он не обязательно небезопасен, а скорее несовершенен.
Проблема в том, что вы вкладываете Promise
s внутри друг друга, вместо того, чтобы связывать их вместе, поэтому одно вложенное возвращаемое значение теряется в нескольких вложенных слоях.
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";
})
});