Firebase 云功能以超时结束,而不是状态正常

问题描述 投票:0回答:1

我刚刚在我的应用程序中实现了支付网关。来自网关的最终交易状态在我的redirect_url处收到,我已将其设置为我的Google Firebase HTTPS云功能之一。网址是这样的:

https://********.cloudfunctions.net/abcd

我认为这个过程以前没有被任何人使用过,因此我很担心。该架构运行良好,交易成功完成,云功能正确提取状态。但问题是,当我检查云函数日志时,我发现这个函数永远不会以 Status OK 结束。总是:

“函数执行花费了 55636 毫秒,完成状态为:‘超时’”

代码如下:

exports.ccavRes = functions.https.onRequest(async (req, res) => {
var ccavEncResponse = ''
var ccavResponse = ''
var workingKey = ****** 
var ccavPOST:any = ''

const md5 = *****//Hashing step;
const keyBase64 = *****//;

// Initializing Vector and then convert in base64 string
const ivBase64 = *******

ccavEncResponse = req.rawBody.toString()
ccavPOST = qs.parse(ccavEncResponse);
const encryption = *****
ccavResponse = ********
const params = ccavResponse.split("&");
let map = new Map<any, any>();
for (var i = 0; i < params.length; i++) {
  var parts = params[i].split('=');
    map.set(parts[0],parts[1].substr(0, parts[1].length))
}

const order_id = map.get('order_id')
const order_status = map.get('order_status')
const database = admin.database().ref()

await database.child(*****).child(order_id).child("Status").set(order_status)


return

})

我尝试按照 Firebase 文档在返回之前添加 res.send() 。但这会产生编译错误:

“响应”类型中不存在属性“发送”

代码是用打字稿编写的。

typescript firebase-realtime-database google-cloud-functions
1个回答
0
投票

使用基于 Promise 的方法代替 for 循环,使用 wait 会更高效。

     await Promise.all(params.map(async (param) => {

     var parts = param.split('=');

     map.set(parts[0], parts[1].substr(0, parts[1].length));   
         })
       );

它可能会解决您的问题,但如果不能解决请告诉我。

© www.soinside.com 2019 - 2024. All rights reserved.