Business
Jobs
  • About Us
  • Solutions
    • Job Postings
      Post your job and receive qualified candidates in 48h.
    • Candidate Assessments
      500+ technical and psychological tests, plus anti-fraud.
    • Headhunting
      Tailor-made executive search from start to finish.
    • Payroll + EOR
      Payroll dispersal and EOR across 15+ LATAM countries.
  • Pricing
  • Jobs

0

214
Views
Obtenga todos los archivos de Amazon S3 dentro de un cubo dentro de Promise

Estoy tratando de obtener miles de archivos de Amazon S3 dentro de una Promesa, pero parece que no puedo averiguar cómo incluir el ContinuationToken dentro si la lista está truncada y reunirlos todos dentro de la promesa. Soy un novato con JS y me vendría bien un poco de ayuda. Esto es lo que tengo, hasta ahora:

 getFiles() .then(filterFiles) .then(mapUrls) ; function getFiles(token) { var params = { Bucket: bucket, MaxKeys: 5000, ContinuationToken: token }; var allKeys = []; var p = new Promise(function(resolve, reject){ s3.listObjectsV2(params, function(err, data) { if (err) { return reject(err); } allKeys.push(data.Contents) if (data.IsTruncated) { s3.listObjectsV2({Bucket: bucket, MaxKeys: 5000, ContinuationToken: data.NextContinuationToken}) console.log('Getting more images...'); allKeys.push(data.Contents) } resolve(data.Contents); }); }); return p; }

Necesito que la función continúe ejecutándose hasta que haya creado una lista de todos los objetos en el depósito para devolver.

about 4 years ago · Juan Pablo Isaza
2 answers
Answer question

0

Necesita ContinuationToken solo la segunda vez.

 var params = { Bucket: bucket, MaxKeys: 5000, }; if (data.IsTruncated) { s3.listObjectsV2({...params, ContinuationToken: data.NextContinuationToken})

En mi opinión, esta es solo una función s3 llamada dos veces, más como una llamada anidada. La recursividad es cuando una función sigue llamándose a sí misma hasta que se cumple una condición específica.

Lea más sobre la recursividad: https://medium.com/@vickdayaram/recursion-caad288bf621

about 4 years ago · Juan Pablo Isaza Report

0

Pude enumerar todos los objetos en el depósito usando async/await y el código a continuación para completar una matriz.

 async function getFiles(objects = []) { const response = await s3.listObjectsV2(params).promise(); response.Contents.forEach(obj => filelist.push(obj.Key)); if (response.NextContinuationToken) { params.ContinuationToken = response.NextContinuationToken; await getFiles(params, objects); } console.log(filelist.length) return filelist; }

¡Gracias a todos los que ayudaron!

about 4 years ago · Juan Pablo Isaza Report
Answer question
Find remote jobs

Discover the new way to find a job!

Top jobs
Top job categories
Business
Post vacancy Pricing Sales
Legal
Terms and conditions Privacy policy
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Show me some job opportunities
There's an error!