Firebase函数中的onCall函数导致Firebase函数日志中出现未处理的拒绝错误

时间:2019-11-14 03:02:20

标签: typescript firebase google-cloud-functions

通过遵循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上搜索了几个小时。

1 个答案:

答案 0 :(得分:1)

使用Cloud Functions,您需要返回一个承诺,该承诺将在所有异步工作完成后解决。对于可调用类型的函数,该promise必须与数据一起解析以发送给客户端。现在,您的函数没有从顶层函数返回任何内容。您至少应该尝试返回stripe.charges.create(...).then(...).catch(...)返回的承诺:

return stripe.charges.create(...)
    ...

请仔细阅读documentation for callables,以确保您了解自己的义务,并确保您完全了解承诺的工作方式,否则事情将无法按照您的期望进行。