Firebase Stripe(错误)承诺必须正确处理



我正在尝试使用firebase和stripe处理我的付款,在尝试将我的功能部署到云中时遇到了一个问题,上面写着"必须正确处理承诺"。我知道这是一个tlint编译错误,但不知道为什么会触发这个错误。

这是我的代码

import * as functions from 'firebase-functions';
import * as admin from 'firebase-admin';
admin.initializeApp(functions.config().firebase);
const stripe = require('stripe')(functions.config().stripe.testkey);
exports.stripeCharge = functions.firestore
.document('/payments/{userId}/mypayments/{paymentId}')
.onCreate((snap,event) => {
const payment = snap.data()
const userId = event.params.userId
const paymentId = event.params.paymentId
// checks if payment exists or if it has already been charged
if (!payment || payment.charge) return null;
return admin.firestore()
.doc(`/users/${userId}`)
.get()
.then(snapshot => {
return snapshot
})
.then(customer => {
const amount = payment.price * 100 // amount must be in cents
const idempotency_key = paymentId  // prevent duplicate charges
const source = payment.token.id
const currency = 'usd'
const charge = {amount, currency, source}
return stripe.charges.create(charge, { idempotency_key })
})
.then((charge) => {
admin.firestore()//The error keeps referring me to this line
.collection('/payments').doc(userId).collection('mypayments').doc(paymentId)
.set({
charge: charge
}, { merge: true })
})
})

产生错误的线路如所述

实际上,使用最新版本的云函数,您不必在Promises链接中包含catch()。运行云功能的平台将自行处理错误。

根据这篇帖子,这可能是关于什么的?[TsLint错误:"必须正确处理承诺"]这显然是TsLint(EsLint?(产生的错误。

然而,独立于TsLint检测到的这个"错误",我认为您的云功能可能会遇到问题,因为您没有返回链的最后一个承诺:

return admin.firestore()     //HERE YOU RETURN CORRECTLY
.doc(`/users/${userId}`)
.get()
.then(snapshot => {
return snapshot         //HERE YOU RETURN CORRECTLY
})
.then(customer => {
const amount = payment.price * 100 // amount must be in cents
const idempotency_key = paymentId  // prevent duplicate charges
const source = payment.token.id
const currency = 'usd'
const charge = {amount, currency, source}
return stripe.charges.create(charge, { idempotency_key })    //HERE YOU RETURN CORRECTLY
})
.then((charge) => {
return admin.firestore()    //HERE, IN YOUR CODE, YOU DON'T RETURN
.collection('/payments').doc(userId).collection('mypayments').doc(paymentId)
.set({
charge: charge
}, { merge: true })
})
})

终于弄明白了无论何时生成promise函数,它都必须以错误处理程序结束,所以我使用简单的catch修复了这个问题

.then((charge) => {
admin.firestore()
.collection('/payments').doc(userId).collection('mypayments').doc(paymentId)
.set({
charge: charge
}, { merge: true })
.catch(er=>{
console.log(er);
return er
}
)
})

相关内容

  • 没有找到相关文章

最新更新