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)
您必须返回异步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();.