Thursday 1 June 2017

Converting callbacks with for loop and recursion to promises

I wrote a function running recursively to find out files whose name include given world. I do not understand how promises works and cannot find a way to write this function with promises despite trying hard.

I tried returning a promise inside findPath function but I couldn't use it since extractFiles calls findPath. I tried to create a list of promises and return all but couldn't succeed neither.

So how could I write these functions with promises?

const fs   = require('fs');
const path = require('path');


function findPath(targetPath, targetWord, done) {
  if (!fs.existsSync(targetPath)) return;

  fs.readdir(targetPath, (err, allPaths) => {
    if (err) done(err, null);

    for (aPath of allPaths) {
      aPath = path.join(targetPath, aPath);
      extractFiles(aPath, targetWord, done);
    }
  });

  function extractFiles(aPath, targetWord, done) {
    fs.lstat(aPath, (err, stat) => {
      if (err) done(err, null);

      if (stat.isDirectory()) {
        findPath(aPath, targetWord, done);
      }
      else if (aPath.indexOf(targetWord) >= 0) {
        let fileName = aPath.split('.')[0];
        done(null, fileName);
      }
    });
  }
}

findPath('../modules', 'routes', file => {
  console.log(file);
});



via Abdullah ihsan Seçer

No comments:

Post a Comment