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

208
Vistas
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 Respuestas
Responde la pregunta

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 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