我一直在为下面的函数而苦苦挣扎,它的 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/