开发者问题收集

Firebase Cloud Functions 使用 onCall 返回已处理的数据

2019-08-14
38

我一直在使用 Firebase 云函数,但遇到了一个问题,即我的函数有时会挂起长达 10 秒才返回数据。我查看了文档,它说我应该在完成后返回一个包含数据的承诺。我的结构目前是这样的:

export const SomeFnName = functions.https.onCall(async (params: SomeTypedParams, context: functions.https.CallableContext) =>
{
    // Bunch of validation that throw functions.https.HttpsError if there is one

    // load some data from the server
    const snapshot = await admin.firestore().collection(Collections.SOMEKEY).doc(params.SOMEID).get();

    // The the snapshot data
    const someData: FirebaseFirestore.DocumentData | undefined = snapshot.data();


    // Do some processing of above then return
    return {
       data1: someData["key1"],
       data2: someData["key2"]
    };
}

如您所见,我正在从单独的文件导出函数,然后像这样注册

exports.SomeFnName = SomeFnName;

这是返回处理后数据的正确方法吗?如果不是,需要做什么才能使其工作?我看不出我还做错了什么,导致服务器调用有时需要很长时间才能执行,有时甚至直接失败。

1个回答

您遇到的情况通常称为“冷启动”。它发生在首次在由无服务器后端(例如 Cloud Functions)分配的新服务器实例上执行函数时。您没有做错任何事,只是支付了冷启动费用(以及您的计算机、Cloud Functions 和 Cloud Firestore 之间的任何网络延迟)。

阅读有关 Google 搜索结果中的冷启动的信息。

Doug Stevenson
2019-08-14