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

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

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 Relatório

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