Reputation: 29
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
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