通过遵循Firebase文档和Stripe API文档,我创建了一个函数,该函数根据传递的令牌创建费用。该功能是使用Firebases onCall函数设置的,可以直接从我的应用程序调用它。
可悲的是,当您调用该函数时,Stripe返回一个错误,尽管该函数似乎没有将错误发送给客户端,因为我的客户端认为这是成功的。
index.ts中的Firebase函数
export const oneTimeCharge = functions.https.onCall((data, context) => {
stripe.charges.create({
amount: data.amount,
currency: data.currency,
source: data.source,
description: data.description
}).then((charge) => {
return {'charge':charge};
}).catch((error) => {
throw new functions.https.HttpsError('unknown', 'Something went wrong!', error);
})
});
当我调用此函数时,Firebase函数日志显示以下两个错误。这使我相信我的功能。https.HttpsError不正确。
错误1
Unhandled rejection
错误2
Error: Something went wrong!
at stripe.charges.create.then.catch (/srv/lib/index.js:37:15)
at <anonymous>
at process._tickDomainCallback (internal/process/next_tick.js:229:7)
和我在Angular中的服务函数将其返回成功。我想念什么或做错什么?我觉得自己已经在Google上搜索了几个小时。
答案 0 :(得分:1)
使用Cloud Functions,您需要返回一个承诺,该承诺将在所有异步工作完成后解决。对于可调用类型的函数,该promise必须与数据一起解析以发送给客户端。现在,您的函数没有从顶层函数返回任何内容。您至少应该尝试返回stripe.charges.create(...).then(...).catch(...)
返回的承诺:
return stripe.charges.create(...)
...
请仔细阅读documentation for callables,以确保您了解自己的义务,并确保您完全了解承诺的工作方式,否则事情将无法按照您的期望进行。