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 之间的任何网络延迟)。
Doug Stevenson
2019-08-14