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

时间:2018-11-01 17:11:28

标签: javascript node.js firebase firebase-realtime-database google-cloud-functions

我一直在为下面的函数而苦苦挣扎,而没有在Firebase日志中显示其console.log()语句。如果我从db.collection调用开始取出所有内容,则会显示顶部的console.log()语句,但是一旦我添加了db.collection调用,则 console.log()语句显示在Firebase的日志中。

我对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);
  });
};

3 个答案:

答案 0 :(得分:2)

您必须返回异步get()方法返回的承诺,请参阅文档here,该文档指出:“要在异步操作后返回数据,请返回承诺。承诺返回的数据发送回客户端。”

因此,以下方法应该起作用:

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);
  });
};

另外,请注意,您应将代码改编为错误处理部分,请参见https://firebase.google.com/docs/functions/callable#handle_errors

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

答案 1 :(得分:2)

您可以在Firebase控制台的特定功能的console.log()标签中查看通过Log打印的数据:

https://console.firebase.google.com/u/0/project/<project-name>/functions/logs

*将<project-name>更改为您的{(没有< >)。

*您可能需要选择特定的功能/日志级别才能实时查看日志。

答案 2 :(得分:0)

您也可以使用文档中所述的查看日志:

https://firebase.google.com/docs/functions/writing-and-viewing-logs#viewing_logs

使用Firebase工具查看日志

firebase functions:log

查看特定功能的日志

firebase functions:log --only <FUNCTION_NAME>