如何在 Firebase Cloud 函数中调用导出的 https Firebase Cloud 函数?

Posted

技术标签:

【中文标题】如何在 Firebase Cloud 函数中调用导出的 https Firebase Cloud 函数?【英文标题】:How to call an exported https Firebase Cloud function within Firebase Cloud functions? 【发布时间】:2019-03-08 02:06:42 【问题描述】:

我目前有一个从客户端调用的函数,现在我还需要从 Firebase Cloud Functions 调用它。

我需要调用的函数的语法是

exports.querySomeAPI = functions.https.onCall((data)=>
    //Does work and returns stuff
);

我从客户端调用它

var querySomeAPI = firebase.functions().httpsCallable('querySomeAPI');
querySomeAPI(
    data: "data"
).then(response => console.log("Query Response is: ", response););

由于我的后端没有定义firebase,我尝试从服务器端调用它

var querySomeAPI = admin.functions().httpsCallable('querySomeAPI');
querySomeAPI(
    data: "data"
).then(response => console.log("Query Response is: ", response););

发现 admin.functions() 不存在。所以我试着用

将它称为普通函数
querySomeAPI(
    data: "data"
).then(response => console.log("Query Response is: ", response););

以及其他一些方法都无济于事。我知道必须有一种方法可以从 Firebase Functions 中调用导出的函数,但到目前为止我尝试过的方法都没有奏效。

有人知道这是怎么做到的吗?

Link for how to call the https callable function on the clientside

【问题讨论】:

【参考方案1】:

如果您尝试直接从像这样的另一个函数调用一个函数,那么您会遇到很多麻烦(并且不必要地增加账单)。你最好只创建一个普通的旧 JS 函数,你的两个 Cloud Functions 导出可以相互独立地共享。

看到这个:Calling a Cloud Function from another Cloud Function

【讨论】:

我不同意这个答案。虽然在许多情况下将所需的函数提取到共享库中就足够了,但远程调用“函数到函数”基本上是微服务背后的整个理念,并且通常有很好的理由这样做.例如,如果您的通用功能具有非常不同的资源需求(例如内存),那么对于需要调用该代码以最大化其内存的所有客户端来说,这并不一定有意义。 @adevine 我的观察是,大多数时候使用可调用函数的移动开发人员实际上并没有尝试组合微服务。这甚至不是可调用类型函数的用途。但是,如果您在此处有一个有用的特定解决方案,请在此处添加您的答案,以便其他人受益。 我想说这对于处理可能导致超时或内存问题的非常大的数据集非常有用。如果我想分担负载,我需要通过一个新的 http 请求来做到这一点。

以上是关于如何在 Firebase Cloud 函数中调用导出的 https Firebase Cloud 函数?的主要内容,如果未能解决你的问题,请参考以下文章

如何直接从您的 Angular 项目中调用 Firebase Cloud Function

如何在 Google Cloud Functions 中调用 Express 函数?

Firebase Cloud Functions shell:添加身份验证令牌以调用可调用对象

如何从 Cloud Function 调用其他 Cloud Firebase Functions

多次调用 Cloud Functions for Firebase

在 firebase 函数中创建 Google Cloud Task