NodeJS 在for循环内管理回调[重复]

cig3rfwq  于 2023-04-29  发布在  Node.js
关注(0)|答案(1)|浏览(143)

此问题已在此处有答案

How do I return the accumulated results of multiple (parallel) asynchronous function calls in a loop?(5个答案)
How do I return the response from an asynchronous call?(41答案)
5天前关闭。

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

如何在所有外循环/内循环迭代完成后返回result
我知道我可以很容易地解决这个问题与promise...thenasync...await机制。出于某种原因,我想用回调机制来解决它。
有什么简单方法可以使用回调吗?

s3服务。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);
    }
  })
}
s4n0splo

s4n0splo1#

你可以简单地使用guard+conditions来管理它,即使使用async/await或promise或async包更好。

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()
               }
               
           })
       }
   }

相关问题