Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Adding async function to async waterfall

I'm trying to develop a NodeJS app, but it wont executing as desired. I want to first execute downloadIMG first and then execute featureMatching and continue this until the for loop terminates. Guide me to rewrite the code in proper manner.

for (var i=0; i<dbImgCount; i++) {
    (function(i) {
        async.waterfall([
            async function downloadIMG(done) {
                try {
                    var options = {
                        url:  FolderPath[i].FolderPath,
                        dest: '/home/ubuntu/imgCompare/'                
                    }
                    const { filename, image } =  await download.image(options);
                    image2 = 'image.jpg';
                    done(null, 'hi');
                } catch (e) {
                    console.error(e)
                }
            },
            async function featureMatching(a, done){
                const img1 = cv.imread(image1);
                const img = 'image.jpg';
                const img2 = cv.imread(img);
                const orbMatchesImg = matchFeatures({
                    img1,
                    img2,
                    detector: new cv.ORBDetector(),
                    matchFunc: cv.matchBruteForceHamming
                    },
                    (console.log(image1+','+img))
                );
                done(null);
            }
        ],
        function (err) {});
    })(i);
}
like image 797
George T Kurian Avatar asked Jul 31 '26 13:07

George T Kurian


1 Answers

Got the answer from here. Async functions can be used in async waterfall by returning args as array from async function.

Like this

  async.waterfall([
           // ...
         async function (arg1, arg2) {
          //...
             const arg3 = await foo()

             return [arg1, arg2, arg3] //USE THIS, OTHERWISE 2ND fn WON'T WORK
         },
         function ([arg1, arg2, arg3], callback) {
           //...
         }
  ],function (err) {});
like image 135
George T Kurian Avatar answered Aug 03 '26 07:08

George T Kurian



Donate For Us

If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!