我正在从事在线预订android应用程序项目。它使用Firestore和Cloud Function。
在应用程序预订中经历三个阶段
phase(Initiate Order):我收到订单请求并点击makeOrder()
http可调用云函数,该函数在预订集合中创建一个文档,该文档具有字段status=
"inProcess"
,并发送带有{{ 1}}(用于以后付款)。
阶段(付款):如果第一阶段成功完成,现在用户必须使用在第一阶段中生成的CHECKSUMHASH
进行付款。如果付款TXN成功,则付款API(more)也会提供CHECKSUMHASH
作为响应。现在我要验证
CHECKSUMHASH
在服务器端,以确保请求未被篡改。
阶段(确认订单):在此阶段,CHECKSUMHASH
(由Payment APT生成)必须得到验证,因此我调用了另一个HTTP Cloud Function CHECKSUMHASH
。如果方法confirmOrder()
返回verifychecksum()
,那么我将状态true
更改为"inProcess"
。
现在的问题是,它总是需要60秒以上的时间,因此请给出错误超时。
我的问题是
花些时间,因为我正在检查文档是否存在,
"pending"
我正在通过这三个阶段来预订订单,这是正确的方法吗?
db.collection(targetColRef).doc(data.TARGET_ID).collection('orders').doc(data.ORDER_ID).get();
const time = getCurrentDate().time;
if (doc.exists && (time - doc.orderTime) < 300)
答案 0 :(得分:0)
执行云功能的环境要求您返回一个值或一个Promise,以便它可以可靠地知道函数何时完成其工作。
如果Cloud Function在60秒后超时,很可能 您没有返回任何结果。就您而言,我对function*
和:
yield new Promise((reject, resolve) => {
我看不到您要在哪里完成生成器功能。我很确定__awaiter
与它有关,但是我也很确定它对您不起作用。
我建议重构代码以使用更简单,更常用的原语,例如:
return new Promise((reject, resolve) => {
如果您有多个需要在函数完成之前完成的承诺,请查看Promise.all()
,它比生成器函数更常见。
我强烈建议您在promises in Cloud Functions上查看道格的视频。