这是我的http cloud函数代码,它读取一些文档然后发送响应
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事务仍在后台运行,因此此消息未发送响应。 我的问题有解决办法吗?
答案 0 :(得分:1)
Promise.all()
期望将一个promises数组作为其参数,但是您没有给它一个array参数。其次,transaction
变量是一个Promise,而不是一个函数。您不能将()
称为诺言。
因此,我认为正确的代码应为return Promise.all([transaction])
。话虽如此,您只有一个诺言,所以您不需要Promise.all
,而只需return transaction
。
不确定是否可以解决您的所有问题。如果您登录到Firebase控制台,请导航至“功能”部分,其中有一个“日志”选项卡,可用于查看功能执行的调试输出。它可以帮助您找出所有问题。我想象已经记录了控制台错误,指出transaction()
不是函数。