Herve Siyou
Herve Siyou

Reputation: 29

Node js how to return variable in async await promise

export async function ss3ListAllFilesTags(bucket: string, folder: string, tag: string){
  let params = {
    Bucket: `${TypesOptions[bucket].bucket}`,
    Prefix: `${folder}`,
    // MaxKeys: 1000,
  };

   return  s3.listObjectsV2(params, function(err, data){
    var tab: string[] = [], t : any;

    if (err) return err;
    else {
      Object.entries(data.Contents).forEach(  (element, cpt ) => {
          serviceDownloadFileWithTags(bucket,element[1].Key).then( (dat) => {
          dat= JSON.parse(dat);
          if ( dat['TagSet'][0].Value == tag || dat['TagSet'][1].Value == tag){
            tab.push(element[1].Key);
            console.log(tab)
            // console.log(`
            // nom fichier: ${element[1].Key}
            // tag 1 : ${JSON.stringify(dat['TagSet'][0])}, cle 1: ${JSON.stringify(dat['TagSet'][0].Key)}, valeur 1: ${JSON.stringify(dat['TagSet'][0].Value)}
            // tag 2 : ${JSON.stringify(dat['TagSet'][1])}, cle 2: ${JSON.stringify(dat['TagSet'][1].Key)}, valeur 2: ${JSON.stringify(dat['TagSet'][1].Value)}
            // `);
          }
        });

      });

      console.table(tab);
      return tab;
      // return data.Contents;
    }
  }).promise()
    
}

I am trying to write a asynchronous function in typescript. Function calls an s3 function to get list of the objects. How can I return tab as result of ss3ListAllFilesTags function.

Upvotes: 1

Views: 248

Answers (1)

Kien Nguyen
Kien Nguyen

Reputation: 2691

You can use async/await and Promise.all() like this:

export async function ss3ListAllFilesTags(bucket: string, folder: string, tag: string){
  let params = {
    Bucket: `${TypesOptions[bucket].bucket}`,
    Prefix: `${folder}`,
    // MaxKeys: 1000,
  };
  try {
    const data = await s3.listObjectsV2(params).promise()
    var tab: string[] = [], t: any;

    await Promise.all(
      Object.entries(data.Contents).map((element) =>
        serviceDownloadFileWithTags(bucket, element[1].Key).then((dat) => {
          dat = JSON.parse(dat)
          if (dat['TagSet'][0].Value == tag || dat['TagSet'][1].Value == tag) {
            tab.push(element[1].Key)
            console.log(tab)
          }
        })
      )
    )

    console.table(tab);
    return tab;
  } catch (err) {
    return err
  }
}

Upvotes: 1

Related Questions