我试着运行一个firebase云函数,它读取5k文档,在失眠状态下运行一分钟多,最后崩溃显示404超时错误,我该怎么修复它?我来自巴西,函数区域默认为美国,但我不认为改变它会有帮助。
我试着让代码更简洁,但没有用。
这是云功能之一:
exports.getTodosPedidos = functions.https.onRequest(
async (req: RequestType, res: ResponseType) => {
try {
const idProjeto = req.query.idProjeto;
if (!idProjeto) {
onFailureResponseStructure(res, "ID do Projeto não fornecido.", 404);
}
const projeto =
idProjeto &&
(await admin.firestore().collection("projetos").doc(idProjeto.toString()).get());
if (projeto != "" && !projeto?.createTime) {
onFailureResponseStructure(res, "O projeto fornecido não existe.", 405);
}
const snapshot = await admin.firestore().collection("pedidos").get();
const result = snapshot.docs.map(doc => ({ ...doc.data(), id: doc.id }));
let idsDosPedidos = result.map(elemento => elemento.id);
let somaDosArquivos = idsDosPedidos.map(async pedidoId => {
let bucketRef = await admin
.storage()
.bucket()
.getFiles({
prefix: `${idProjeto}/arquivos/${pedidoId}/`,
});
return bucketRef[0].map(elemento => parseInt(elemento.metadata.size));
});
const resultado = await Promise.all(somaDosArquivos);
onSuccessResponseStructure(res, { resultado, idsDosPedidos });
} catch (error: any) {
onFailureResponseStructure(res, error.message, 500);
}
}
);
const onSuccessResponseStructure = (res: ResponseType, data: any) => {
return res.status(200).json({
status: "OK",
data,
messages: [],
statusCode: "200",
});
};
const onFailureResponseStructure = (
res: ResponseType,
messages: string,
statusCode: number
) => {
return res.status(statusCode).json({ status: "ERRO", data: [], messages, statusCode });
};
1条答案
按热度按时间xqkwcwgp1#
我对firebase不是很熟悉,但是其他的云服务允许你增加函数的超时时间,看起来firebase也可以... https://firebase.google.com/docs/functions/manage-functions#set_timeout_and_memory_allocation
不过,对于长时间运行的任务,您可能需要调查其他服务。