Firebase函数未记录“ console.log()”语句

Nat*_*les 6 javascript node.js firebase firebase-realtime-database google-cloud-functions

我一直在为下面的功能而苦苦挣扎,因为它的console.log()语句没有出现在Firebase日志中。如果我拿出一切开始与db.collection通话时,console.log()在顶部报表会显示出来,但一旦我补充一点,db.collection通话,没有了的console.log()报表火力地堡的日志显示出来。

我对JavaScript并不是很熟悉(我通常使用Python进行后端编程),因此这可能与Promises的工作方式有关。我正在研究这个。

知道发生了什么吗?

exports.purchaseItem = functions.https.onCall((data, context) => {
  console.log('data:')
  console.log(data)
  let lbcCustomerStripeToken = data.lbcCustomerStripeToken
  let lbcStoreId = data.lbcStoreId
  let amount = data.amount
  console.log('lbcCustomerStripeToken:')
  console.log(lbcCustomerStripeToken)
  console.log('lbcStoreId:')
  console.log(lbcStoreId)
  console.log('amount:')
  console.log(amount)

  let lbcFee = Math.round(amount * 0.02)

  db.collection('stores').doc(lbcStoreId).get().then(lbcStore => {
    if (!lbcStore.exists) {
      console.log('No such product!');
    } else {
      console.log('Document data:', product.data());
    }
    console.log('storeInfo:')
    console.log(lbcStore.data())
    return {message: 'Success'}
  })    
  .catch((error) => {
    console.log(error);
  });
};
Run Code Online (Sandbox Code Playgroud)

Ren*_*nec 9

您必须返回异步get()方法返回的promise ,请参阅此处的文档其中指出“要在异步操作后返回数据,请返回一个promise。promise 返回的数据将发送回客户端。”

所以以下应该工作:

exports.purchaseItem = functions.https.onCall((data, context) => {
  console.log('data:')
  console.log(data)
  let lbcCustomerStripeToken = data.lbcCustomerStripeToken
  let lbcStoreId = data.lbcStoreId
  let amount = data.amount
  console.log('lbcCustomerStripeToken:')
  console.log(lbcCustomerStripeToken)
  console.log('lbcStoreId:')
  console.log(lbcStoreId)
  console.log('amount:')
  console.log(amount)

  let lbcFee = Math.round(amount * 0.02)

  return db.collection('stores').doc(lbcStoreId).get().then(lbcStore => {
    if (!lbcStore.exists) {
      console.log('No such product!');
    } else {
      console.log('Document data:', product.data());
    }
    console.log('storeInfo:')
    console.log(lbcStore.data())
    return {message: 'Success'}
  })    
  .catch((error) => {
    // To be adapted here, see https://firebase.google.com/docs/functions/callable#handle_errors
    console.log(error);
  });
};
Run Code Online (Sandbox Code Playgroud)

另请注意,您应该针对错误处理部分调整您的代码,请参阅https://firebase.google.com/docs/functions/callable#handle_errors

最后,请确保您的db常量是用admin.firestore();.