Firebase云功能不发送响应

时间:2018-11-22 06:14:45

标签: firebase google-cloud-firestore google-cloud-functions

这是我的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事务仍在后台运行,因此此消息未发送响应。 我的问题有解决办法吗?

1 个答案:

答案 0 :(得分:1)

Promise.all()期望将一个promises数组作为其参数,但是您没有给它一个array参数。其次,transaction变量是一个Promise,而不是一个函数。您不能将()称为诺言。

因此,我认为正确的代码应为return Promise.all([transaction])。话虽如此,您只有一个诺言,所以您不需要Promise.all,而只需return transaction

不确定是否可以解决您的所有问题。如果您登录到Firebase控制台,请导航至“功能”部分,其中有一个“日志”选项卡,可用于查看功能执行的调试输出。它可以帮助您找出所有问题。我想象已经记录了控制台错误,指出transaction()不是函数。