-2
   const result = [];
   for(i=0; i < 5; i++){
       for(j=0; j<3; j++){
           s3Service.getS3Content(key, bucket, (err, res)=>{
               
               if(err){
                   console.log("error occurred !");
                   result.push({msg:`error occurred for ${key}`})

               }
               
               if(res){
                   result.push(res);
               }
               
           })
       }
   }

How to return result when all outer/inner loop iterations are done ?

I know I can easily solve this issue with promise...then or async...await mechanism. For some reason, I want to resolve it with callback mechanism.

is there any simple way with callback ?

s3Service.js

const getS3Content = (key, bucketName, cb) => {
  S3.getObject({ Bucket: bucketName, Key: key }, (err, result) => {
    if (err) {
      console.log("error occured in getS3Content", err);
      cb(err);
    }

    if (result) {
      cb(null, result);
    }
  })
}
micronyks
  • 54,797
  • 15
  • 112
  • 146

1 Answers1

-1

you can simply use a guard+conditions to manage it, even if it's better to use async/await or promise, or async package

const result = [];
 var todo = 5 * 3;
 var done = 0;
   for(i=0; i < 5; i++){
       for(j=0; j<3; j++){
           s3Service.getS3Content(key, bucket, (err, res)=>{
               
               if(err){
                   console.log("error occurred !");
                   result.push({msg:`error occurred for ${key}`})

               }
               
               if(res){
                   result.push(res);
               }

               if(++done == todo){
                  return callback()
               }
               
           })
       }
   }
Daphoque
  • 4,421
  • 1
  • 20
  • 31