这是我的http云函数代码,它读取一些文档,然后发送响应
res.set('Access-Control-Allow-Origin', '*');
var orderId;
var result = "";
var userId;
var promoCode;
var promoRef;
var userDocRef;
var promoCodeDoc;
//userId = req.body.userId;
//orderId = req.body.orderId;
promoCode = req.body.promoCode;
//userDocRef = db.collection("Users").doc()
promoRef = db.collection("PromoCodes").doc(promoCode);
var transaction = db.runTransaction(t => {
return t.get(promoRef)
.then(promoCodeDoc => {
if(promoCodeDoc.exists){
result = "OK";
res.json(result);
}else{
result = "Invalid Promocode!";
res.json(result);
}
//t.update(cityRef, {population: newPopulation});
return true;
});
}).then(result => {
console.log('Transaction success!');
return true;
}).catch(err => {
console.log('Transaction failure:', err);
});
return Promise.all(transaction());
但这并没有发送响应,因为函数结束了,但Firestore事务仍在后台运行。有解决我问题的办法吗?
Promise.all()
需要一个promise数组作为其参数,但您没有给它一个数组参数。其次,transaction
变量是一个承诺,而不是一个函数。你不能把()
称为承诺。
所以我认为正确的代码应该是return Promise.all([transaction])
。话虽如此,你只有一个承诺,所以你不需要Promise.all
,只需要return transaction
。
但不确定这是否能解决你所有的问题。如果您登录到firebase控制台,导航到函数部分,会有一个"日志"选项卡,允许您查看函数执行的调试输出。它可能会帮助你找出所有的问题。我想已经记录了控制台错误,指出transaction()
不是一个函数。