Business
Jobs
  • About Us
  • Solutions
    • Job Postings
      Post your job and receive qualified candidates in 48h.
    • Candidate Assessments
      500+ technical and psychological tests, plus anti-fraud.
    • Headhunting
      Tailor-made executive search from start to finish.
    • Payroll + EOR
      Payroll dispersal and EOR across 15+ LATAM countries.
  • Pricing
  • Jobs

0

394
Views
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 answers
Answer question

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 Report
Answer question
Find remote jobs

Discover the new way to find a job!

Top jobs
Top job categories
Business
Post vacancy Pricing Sales
Legal
Terms and conditions Privacy policy
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Show me some job opportunities
There's an error!