Облачные функции Angular и Firebase возвращают значение null

#angular #google-cloud-functions

# #угловатый #google-облачные функции

Вопрос:

Я работаю над платежной системой. Я имитирую node.js использование облачных функций. Я отправляю запрос из Angular в облачные функции. Затем я отправляю второй запрос из облачных функций в платежный API. Платежный API успешно получает запрос, и платеж проходит успешно. Но, я думаю, из-за асинхронной структуры, ответ отображается как null на угловой стороне.

Угловой код:

 constructor(private fns: AngularFireFunctions) {
}
...

...
const callable = this.fns.httpsCallable('app');
var data = callable({req: request})
    
data.subscribe(async res => {
  console.log(res);
});
 

Облачные функции:

 exports.app = functions.https.onCall((data, context) => {
    var res = "";
    iyzipay.payment.create(data.req, function (err, result) {
        res = resu<
    });
    return res;
});
 

Как я могу дождаться ответа? Я пробовал async / await, но я не совсем разбираюсь в этих темах.
Спасибо!

Ответ №1:

После продолжения поиска я нашел такое решение:

Облачные функции:

 exports.app = functions.https.onCall((data, context) => {
    return new Promise((Resolve, Reject) => {
        iyzipay.payment.create(data.req, async function (err, result) {
            if (err) {
                Reject({
                    id: 'Payment',
                    message: err
                })
            }
            if (result amp;amp; result.status == 'failure') {
                Reject({
                    id: 'Payment Failed',
                    message: result.errorMessage
                })
            }
            Resolve(result)
        });
    });
});

 

И угловая сторона, как сказал Акиф:

     const callable = this.fns.httpsCallable('app');
    const res = await callable({ req: request }).toPromise();
    console.log(res);