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

340
Vistas
¿Cómo agregar esperar en un bucle for para esperar la llamada de función?

soy un principiante en Javascript / Nodejs.

quiero leer una carpeta, y luego cada uno por cada llamar a una función con await...

Tengo una Carpeta, dentro de esa carpeta tengo Imágenes. con readdir obtengo todas las imágenes de carpeta con extensión.

con ese código, leí la carpeta y dividí ImageName y .png, así que solo tengo ImageName sin .png.

idk si hay una solución mejor.

 fs.readdir(testFolder, (err, files) => { files.forEach(file => { const split = file.split('.'); .....split[0] }); });

Si agrego este código dentro del readdir

 storeAsset();

Código de storeAsset

 async function storeAsset() { const client = new NFTStorage({ token: NFT_STORAGE_API_KEY }) const metadata = await client.store({ name: 'ExampleNFT', description: 'My ExampleNFT is an awesome artwork!', image: new File( [await fs.promises.readFile('assets/Test.png')], 'MyExampleNFT.png', { type: 'image/png' } ), }) console.log("Metadata stored on Filecoin and IPFS with URL:", metadata.url) }

La función storeAsset() se ejecuta sin problemas, pero no está esperando para finalizar StoreAsset y luego cada uno por cada uno.

Si agrego, espere que el bucle forEach espere a que finalice cada archivo...;

 await storeAsset();

me sale este mensaje:

 await storeAsset(); ^^^^^ SyntaxError: Unexpected reserved word ←[90m at ESMLoader.moduleStrategy (node:internal/modules/esm/translators:115:18)←[39m ←[90m at ESMLoader.moduleProvider (node:internal/modules/esm/loader:289:14)←[39m ←[90m at async link (node:internal/modules/esm/module_job:70:21)←[39m

Entonces, ¿cómo puedo modificar la función readdir con await storeasset para que cada llamada de función espere a que finalice y luego a la siguiente?

gracias por ayudar

editar:

tengo esto ahora:

 fs.readdir(testFolder, (err, files) => { files.forEach(async file => { const split = file.split('.'); // await storeAsset(); // console.log(split[0]); // process.exit(1); }); });

pero esta un poco mal...

 Metadata stored on Filecoin and IPFS with URL: ipfs://xxx/metadata.json 4 Metadata stored on Filecoin and IPFS with URL: ipfs://xxx/metadata.json 5 Metadata stored on Filecoin and IPFS with URL: ipfs://xxx/metadata.json 1 Metadata stored on Filecoin and IPFS with URL: ipfs://xxx/metadata.json 3 Metadata stored on Filecoin and IPFS with URL: ipfs://xxx/metadata.json 2

Necesito: 1 Imagen > Subir esperar a que se devuelva la respuesta, luego 2 Imagen y así sucesivamente, y no comenzar cada carga al mismo tiempo y luego la carga es mixta y no 1,2,3,4,5...

about 4 years ago · Juan Pablo Isaza
2 Respuestas
Responde la pregunta

0

Para que las iteraciones esperen a la anterior, y la anterior está ejecutando algo asíncrono, puede esperar usando un bucle for simple y esperar.

Los métodos de matriz como forEach no tienen un mecanismo que les permita esperar a que finalice una operación asíncrona antes de pasar a la siguiente iteración.

Finalmente, la razón por la que obtiene SyntaxError: Unexpected reserved word es que la función forEach debe ser una función asíncrona, aunque eso no resolverá el problema que está tratando aquí.

 const run = async () => { for (const x of list) { await do(x) } } run()
about 4 years ago · Juan Pablo Isaza Denunciar

0

Este es un ejemplo genérico para mostrar cómo se puede usar el código asincrónico junto con readdir y un bucle.

 const fs = require("fs") function pr(f) { return new Promise((resolve, _reject) => { setTimeout(function () { resolve("got file " + f) }, 500) }) } const pth = __dirname; // whatever directory path with something in it... fs.readdir(pth, async (err, files) => { // Don't use a forEach syntax as it doesn't support asynchronous code, // it would not throw an error, but the promises won't be // resolved inside the loop with forEach. for (const f of files) { const msg = await pr(f); console.log(msg) } })

Y aquí hay un ejemplo que debería corresponder a su caso (no entendió completamente dónde llama al activo de la tienda y cómo usa el iterador de archivos, pero debería ilustrar el punto)

 fs.readdir(testFolder, async (err, files) => { // ... for (const file in files) { await storeAsset(); } // ... });
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