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

395
Vistas
Uso de JavaScript Promise All: ¿es válida esta sintaxis?

Tengo dos tablas con usuarios, donde cada identificación para un usuario es la misma en ambas tablas (no preguntes por qué tengo dos tablas de usuarios). En algún momento, necesito filtrar a los usuarios de la tabla 1, y si cierta condición es verdadera, almaceno una promesa (solicitud de eliminación) para cada usuario en (llamémoslo) tableOnePromises. Hago lo mismo para la mesa 2. Para vaciar la mesa 2, DEBO vaciar primero la mesa uno debido a algunos requisitos. Esto es lo que hice:

 let tableOnePromises = []; let tableTwoPromises = []; tableOne.forEach(item => { if(item.deactivated) { const tableOneDeleted = supabase .from("table-one") .delete() .match({id: item.id}); tableOnePromises.push(tableOneDeleted); const tableTwoDeleted = supabase .from("table-two") .delete() .match({id: item.id}); tableOnePromises.push(tableTwoDeleted); } }); await Promise.all(tableOnePromises).then(() => { return Promise.all(tableTwoPromises) }).catch(err => console.log(err));
about 4 years ago · Juan Pablo Isaza
1 Respuestas
Responde la pregunta

0

Suponiendo que el código que usa await está dentro de una función async (o en el nivel superior de un módulo), la sintaxis es correcta, pero probablemente no sea lo que usaría (en general, evite mezclar async / await con devoluciones de llamada explícitas a través .then y .catch ), y por separado, probablemente no funcione como esperaba (esto se confirma al decir que su código no se eliminó de table-two ).

Para cualquier valor de id en particular, su código comienza a eliminarse de table-one y luego inmediatamente comienza a eliminarse de table-two sin esperar a que se complete la eliminación en la table-one :

 // STARTS the deletion but doesn't wait for it to finish const tableOneDeleted = supabase .from("table-one") .delete() .match({id: item.id}); // ... // Starts deleting from `table-two`, even though the item may still be in `table-one` const tableTwoDeleted = supabase .from("table-two") .delete() .match({id: item.id});

Recuerde que una promesa es solo una forma de observar un proceso asincrónico; en el momento en que tiene la promesa, el proceso que está observando ya está en marcha.¹ Entonces, aunque no espera las promesas de la table-two hasta más tarde, inicia las eliminaciones table-two inmediatamente.

...DEBO vaciar primero la mesa uno debido a algunos requisitos...

Si por "vacío" solo quiere decir que debe asegurarse de haber delete una id particular en table-one antes de hacerlo en la table-two , debe esperar a que se complete la eliminación de la table-one antes de comenzar la eliminación table-two . Pondría eso en una función:

 async function deleteItem(id) { await supabase .from("table-one") .delete() .match({id}); await supabase .from("table-two") .delete() .match({id}); }

Entonces el código se convierte en:

 const promises = []; for (const {deactivated, id} of tableOne) { if (deactivated) { promises.push(deleteItem(id)); } } await Promise.all(promises); // With the `try`/`catch` if desired

...o si está bien hacer dos pasadas a través de la matriz:

 await Promise.all( // With the `try`/`catch` if desired tableOne.filter(({deactivated}) => deactivated) .map(({id}) => deleteItem(id)) );

¹ "... para cuando tienes la promesa, el proceso que está observando ya está en marcha". Ese es el caso normal. Desafortunadamente, hay una biblioteca de base de datos de documentos popular que no comienza su trabajo en algo hasta que / a menos que llame then la promesa de hacerlo. Pero eso es una excepción y un antipatrón.

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