首页 > 解决方案 > Angular 和 Firebase 云函数返回 null

问题描述

我正在研究支付系统。我使用云函数模拟 node.js。我从 Angular 向 Cloud Functions 发送请求。然后,我将第二个请求从云函数发送到支付 API。支付接口成功获取请求,支付成功。但是,我猜由于异步结构,响应在 Angular 端显示为 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 = result;
    });
    return res;
});

我该如何等待回复?我尝试了 async/await,但我并不完全了解这些主题。谢谢!

标签: angulargoogle-cloud-functions

解决方案


继续搜索后,我找到了这样的解决方案:

云功能:

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 && result.status == 'failure') {
                Reject({
                    id: 'Payment Failed',
                    message: result.errorMessage
                })
            }
            Resolve(result)
        });
    });
});

像 Akif 这样有棱角的一面说:

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

推荐阅读