Я пытаюсь реализовать облачную функцию Parse, которая использует метод проверки Mailgun API для адреса электронной почты. Я, очевидно, делаю что-то не так, поскольку когда я вызываю этот метод из objective-c, я получаю обратно nil, но облачный журнал (console.info) показывает, что метод выполняется правильно - просто не возвращает никакого значения. Я новичок в мышлении async / Promise в Javascript, поэтому мне интересно, может ли кто-нибудь увидеть, где я здесь ошибаюсь.
Моя облачная функция, реализованная на моем сервере Parse Server node.js:
Parse.Cloud.define('validateEmail', async(request) => {
var mailgun = require('mailgun.js');
var mg = mailgun.client({
username: 'api',
key: process.env.MAILGUN_API_KEY,
public_key: process.env.MAILGUN_PUBLIC_KEY
});
mg.validate.get(request.params.email, {useMasterKey: true}).then(data => {
console.info(data);
return Promise.resolve(JSON.stringify(data));
})
.catch(err => {
console.info(err);
return Promise.resolve(error);
});
})
облачная функция вызывается из кода objective-c как:
[PFCloud callFunctionInBackground:@"validateEmail" withParameters:@{@"email":user.email} block:^(NSString *bodydata, NSError *error) {
NSDictionary *body = [NSJSONSerialization JSONObjectWithData:[bodydata dataUsingEncoding:NSUTF8StringEncoding] options:0 error:nil];
NSLog(@"validateEmail : %@", body);
}];



![Безумие обратных вызовов в javascript [JS]](https://i.imgur.com/WsjO6zJb.png)


Это было легко исправить, как только я понял, как это сделать. Вот мое рабочее решение:
Parse.Cloud.define('validateEmail', async (request) => {
var mailgun = require('mailgun.js');
var mg = mailgun.client({
username: 'api',
key: process.env.MAILGUN_API_KEY,
public_key: process.env.MAILGUN_PUBLIC_KEY
});
return mg.validate.get(request.params.email, true).then(data => {
return data})
.catch(err => handleParseError(err));
})
Рекомендую прочитать облачный код документация.