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

205
Visualizações
Async/await no funciona con mkdir() en un bucle

Tengo un método que primero crea una carpeta de pedidos y luego crea varias subcarpetas de productos en esa carpeta de pedidos. Y a cada carpeta de producto, muevo algunas imágenes. Quiero que todo esto se haga antes de que el método devuelva verdadero. He escrito el siguiente código pero no funciona como esperaba.

El bucle for se atasca en el archivo de movimiento en espera y la función no se ejecuta más. Estoy usando async/await por primera vez y no tengo idea de por qué sucede. ¿Puede alguien señalar lo que estoy haciendo mal o se puede hacer de una mejor manera?

 static async saveOrderPhotos(allProduct , transactionId) { var products = allProduct; var orderTransactionId = transactionId; var success = true; const makedir = promisify(fs.mkdir); const movefile = promisify(fsExtra.move); const movefiles = async (i) => { for (let j = 0; j < products[i].photos.length; j++) { await movefile(`public/uploads/orders/temporary/${Order.getfilename(products[i].photos[j])}`, `public/uploads/orders/${products[i].photos[j]}`, (err) => { }); } console.log("Files moves for product-" , i+1); return true; } const createProductFolders = async () => { for (let i = 0; i < products.length; i++) { if (products[i].photos.length > 0) { await makedir(`public/uploads/orders/Order-${orderTransactionId}/Product-${i + 1}`, async () => { console.log("Product Directory Created"); // then move files into the product folder await movefiles(i); }); } } return true; } try { if (Order.hasPhotos(products)) { // create order folder await makedir(`public/uploads/orders/Order-${orderTransactionId}`, async () => { console.log("Order Directory Created"); // then create product folder await createProductFolders(); console.log("All Files moved"); }); } console.log("Returning true"); return true; } catch (err) { console.log(err); } }
about 4 years ago · Juan Pablo Isaza
1 Respostas
Responde à pergunta

0

No pase una devolución de llamada a movefile() y makedir() como último argumento. Estas ya son versiones prometidas de las funciones, por lo que la devolución de llamada se usa para eso. Comunican la finalización a través de su promesa devuelta, no a través de una devolución de llamada.

Cuando pasa una devolución de llamada, arruina los argumentos de la versión prometida y la promesa nunca recibe su devolución de llamada, por lo que la promesa nunca se resuelve y el código se atasca.

Tenga en cuenta que las versiones actuales de nodejs ya tienen versiones prometidas de un montón de funciones. Por ejemplo, puede usar directamente estos que podrían ser relevantes para su código:

 fs.promises.mkdir() fs.promises.rename() fs.promises.copyFile()
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