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-коде нет проблем, проблема заключается в облачном коде, поэтому вам нужно изменить облачный код, поскольку он не обязательно небезопасен, а скорее несовершенен.

Проблема в том, что вы вкладываете Promises внутри друг друга, вместо того, чтобы связывать их вместе, поэтому одно вложенное возвращаемое значение теряется в нескольких вложенных слоях.

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";
    })
});
Другие вопросы по тегам