Empresas
Empleos
  • Sobre nosotros
  • Soluciones
    • Publicación de vacantes
      Publica tu vacante y recibe candidatos calificados en 48h.
    • Evaluación de candidatos
      500+ pruebas técnicas y psicológicas, más anti-fraude.
    • Headhunting
      Búsqueda ejecutiva a la medida de principio a fin.
    • Nómina + EOR
      Dispersión de nómina y EOR en más de 15 países de LATAM.
  • Precios
  • Empleos

0

161
Vistas
subir archivos xlsx o csv a firebase

Hola , estoy tratando de cargar archivos ( .csv, .xlsx de 5000 filas y 6 columnas) a firebase con funciones en la nube a las que llamo desde la interfaz, la función en la nube se inicia y después de unos segundos de ejecución, se produce un error " code":"4" "detalles":"Fecha límite excedida"

(Plan de fuego)

  1. la carga es muy lenta
  2. obtener un error de fecha límite excedida con el código 4
  3. está bloqueando el servidor después de recibir el error

explicación del código a continuación:
Hago un bucle for of que itera sobre una matriz de matrices que se ve así [['Dufour', 'Annie', 'annie.duf@gmail.com', 33683333005, 'f'], ['john',' Doe', 'john@gmail.com', 33223424, 'm']] luego formateo cada fila para estructurarla como un documento de firestore con muchos campos e intento agregarlo a firestore, luego se bloquea, no puedo averiguar cuándo se bloquea, es realmente aleatorio y cuando intento un archivo más pequeño (1000 filas) también se bloquea después de unos segundos de ejecución

 export const createNewLeads = functions.region("europe-west3").https.onCall(async (data, context) => { if (!context.auth) { throw new functions.https.HttpsError('failed-precondition', 'The function must be called' + 'while authenticated.'); } const { category, subcategory, allLeads, downloadUrl, file_id, fileDetails } = data; for (const lead of allLeads) { const leads_infos = format_lead_infos(lead , fileDetails); const leads_meta = format_lead_metadata(downloadUrl, file_id, fileDetails); const db_lead_ref = admin.firestore().collection('leads'); const new_lead_doc_id = db_lead_ref.doc().id; db_lead_ref .doc(new_lead_doc_id).set({ lead_id: new_lead_doc_id, category: category, subcategory: subcategory, createdOn: Date(), uploaded_by: context.auth.uid, purchased_by: null, metadata: leads_meta, infos: leads_infos }).then(() => { functions.logger.info('createLeads SUCCESS', { docId: new_lead_doc_id }); return { user_id: new_lead_doc_id, created: true, }; }).catch((error: any) => { functions.logger.info('createLeads ERROR', { error }); return { error: true, err_mess: error, }; }); } });
about 4 years ago · Juan Pablo Isaza
2 Respuestas
Responde la pregunta

0

Por lo que puedo ver, no está manejando correctamente la naturaleza asíncrona de escribir en Firestore, ya que no está await la llamada a set() . También está devolviendo un resultado en la primera escritura exitosa del documento en el bucle, lo que parece sospechoso.

Esto debería estar más cerca de lo que necesitas:

 try { for (const lead of allLeads) { const leads_infos = format_lead_infos(lead , fileDetails); const leads_meta = format_lead_metadata(downloadUrl, file_id, fileDetails); const db_lead_ref = admin.firestore().collection('leads'); const new_lead_doc_id = db_lead_ref.doc().id; await db_lead_ref.doc(new_lead_doc_id).set({ lead_id: new_lead_doc_id, category: category, subcategory: subcategory, createdOn: Date(), uploaded_by: context.auth.uid, purchased_by: null, metadata: leads_meta, infos: leads_infos }); } } catch (error: any) => { functions.logger.info('createLeads ERROR', { error }); return { error: true, err_mess: error, }; } functions.logger.info('createLeads SUCCESS', { docId: new_lead_doc_id return { user_id: new_lead_doc_id, created: true, };

En este código, await cada operación de escritura del documento y luego devolvemos un error si alguno de ellos falla, y el éxito solo una vez que todos tienen éxito.

about 4 years ago · Juan Pablo Isaza Denunciar

0

Hola, Frank, gracias por ayudarnos, copié el código que nos diste, pero después de unos segundos de ejecución, recibí este error del código del registro de la consola de Firebase.

 export const createNewLeads = functions.region("europe-west3").https.onCall(async (data, context) => { if (!context.auth) { throw new functions.https.HttpsError('failed-precondition', 'The function must be called' + 'while authentificated.'); } const { category, subcategory, allLeads, downloadUrl, file_id, fileDetails } = data; const db_lead_ref = admin.firestore().collection('leads'); const new_lead_doc_id = db_lead_ref.doc().id; try { for (const lead of allLeads) { const leads_infos = format_lead_infos(lead , fileDetails); const leads_meta = format_lead_metadata(downloadUrl, file_id, fileDetails); await db_lead_ref.doc(new_lead_doc_id).set({ lead_id: new_lead_doc_id, category: category, subcategory: subcategory, createdOn: Date(), uploaded_by: context.auth.uid, purchased_by: null, metadata: leads_meta, infos: leads_infos }); } } catch (error:any) { functions.logger.info('createLeads ERROR', { error }); return { error: true, err_mess: error, } } functions.logger.info('createLeads SUCCESS', { docId: new_lead_doc_id }) return { user_id: new_lead_doc_id, created: true, } });

ingrese la descripción de la imagen aquí

about 4 years ago · Juan Pablo Isaza Denunciar
Responde la pregunta
Encuentra empleos remotos

¡Descubre la nueva forma de encontrar empleo!

Top de empleos
Top categorías de empleo
Empresas
Publicar vacante Precios Comercial
Legal
Términos y condiciones Política de privacidad
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomiéndame algunas ofertas
Necesito ayuda