javascript - Firebase 函数不记录 "console.log()"语句

标签 javascript node.js firebase google-cloud-functions

我一直在为下面的函数而苦苦挣扎,它的 console.log() 语句没有出现在 Firebase 日志中。如果我删除所有以 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);
  });
};

最佳答案

您必须返回异步 get() 方法返回的 promise ,请参阅文档 here表示“异步操作后要返回数据,返回一个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);
  });
};

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

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

关于javascript - Firebase 函数不记录 "console.log()"语句,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53106097/

相关文章:

javascript - 使用自动完成值填充隐藏字段

javascript - 打印对象不包含所有键

node.js - Expressjs 中的链式请求

javascript - 参数未传递到 firebase 云函数中的本地函数

ios - swift4 Firebase UI 身份验证不适用于 twitter

ios - 使用未声明的标识符 'FIRApp'

Javascript |检查是否已打开具有特定 URL 的窗口

javascript - BJQS slider 点击暂停

php - 将信息从 javascript 传递到 php 文件,同时限制用户自己做?

javascript - GraphQL 不允许在 NodeJS 中插入数组对象