Parse Cloud Code определяет с помощью Parse 3.0.0 - PullRequest
0 голосов
/ 01 октября 2018

Я пытаюсь вернуть значения из функций 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 Ответ

0 голосов
/ 01 октября 2018

Нет проблем в вашем коде 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";
    })
});
...