Empresas
Empregos
  • Sobre nós
  • Soluções
    • Publicação de vagas
      Publique sua vaga e receba candidatos qualificados em 48h.
    • Avaliações de candidatos
      Mais de 500 testes técnicos e psicológicos, mais anti-fraude.
    • Headhunting
      Busca executiva personalizada do início ao fim.
    • Folha de Pagamento + EOR
      Dispersão de folha e EOR em mais de 15 países da LATAM.
  • Preços
  • Empregos

0

386
Visualizações
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 Respostas
Responde à pergunta

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 Relatório
Responde à pergunta
Encontrar trabalhos remotos

Descubra a nova forma de encontrar um emprego!

melhores empregos
Principais categorias de trabalho
Empresas
Postar vaga Preços Comercial
Jurídico
Termos e Condições Política de privacidade
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomende algumas ofertas para mim
Preciso de ajuda