Angular 和 Firebase 云函数返回 null

Posted

技术标签:

【中文标题】Angular 和 Firebase 云函数返回 null【英文标题】:Angular and Firebase Cloud Functions return null 【发布时间】:2021-03-04 06:14:42 【问题描述】:

我正在开发一个支付系统。我使用云函数模拟 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,但我并不完全了解这些主题。 谢谢!

【问题讨论】:

【参考方案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 && 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);

【讨论】:

以上是关于Angular 和 Firebase 云函数返回 null的主要内容,如果未能解决你的问题,请参考以下文章

在firebase云函数中部署nestjs

Firebase 云函数返回 304 错误然后重启

如何在firebase云函数和角度之间共享打字稿类

从 onCall firebase 云函数返回一个字符串

Firebase 云函数错误:函数返回未定义、预期的 Promise 或值

如何直接从您的 Angular 项目中调用 Firebase Cloud Function