Obtenez tous les Amazon S3 fichiers à l'intérieur d'un seau à l'intérieur de la Promesse

0

La question

Je suis en train de saisir des milliers de fichiers à partir d'Amazon S3 à l'intérieur d'une Promesse, mais je n'arrive pas à comprendre comment inclure le ContinuationToken à l'intérieur si la liste est tronqué et de recueillir tous ensemble au sein de la promesse. Je suis un novice avec JS et pourrait utiliser un peu d'aide. Voici ce que j'ai, à ce jour:

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

J'ai besoin de la fonction pour continuer l'exécution jusqu'à ce que j'ai créé une liste de tous les objets dans le seau pour le retour.

amazon-web-services aws-sdk javascript
2021-10-25 16:01:51
2
0

Vous avez besoin ContinuationToken la deuxième fois seulement.

var params = {
    Bucket: bucket,
    MaxKeys: 5000,
};

if (data.IsTruncated) {
    s3.listObjectsV2({...params, ContinuationToken: data.NextContinuationToken})

IMO, c'est juste un s3 fonction appelée deux fois, de plus en plus comme un imbriquée appel. La récursivité est une fonction continue d'appeler lui-même jusqu'à ce qu'une condition spécifiée est remplie.

Lire plus sur la récursivité: https://medium.com/@vickdayaram/recursion-caad288bf621

2021-10-25 16:29:42

Bon je vais mettre à jour ma question avec plus de détails. J'ai besoin de la fonction pour continuer à fonctionner jusqu'à ce que tous les fichiers ont été extraits.
AppleBaggins
0

J'ai été en mesure d'énumérer tous les objets dans le seau à l'aide async/await et le code ci-dessous pour remplir un tableau.

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

Merci à tous ceux qui ont aidé!

2021-10-26 00:59:26

Dans d'autres langues

Cette page est dans d'autres langues

Русский
..................................................................................................................
Italiano
..................................................................................................................
Polski
..................................................................................................................
Română
..................................................................................................................
한국어
..................................................................................................................
हिन्दी
..................................................................................................................
Türk
..................................................................................................................
Česk
..................................................................................................................
Português
..................................................................................................................
ไทย
..................................................................................................................
中文
..................................................................................................................
Español
..................................................................................................................
Slovenský
..................................................................................................................