Node.js functions simultaneously supporting callbacks & Promises


2017-05-04 · 1 min read

Here's a simple trick to augment an existing callback function in Node.js with a possibility to be used in a Promise context.

Let's start with the following function:

function readFileAsArray(file, cb) {
  fs.readFile(file, (err, data) => {
    if (err) return cb(err);
 
    const lines = data.toString().trim().split('\n');
    cb(null, lines);
  });
};

Here's the same function augmented with Promise, so it can be used either if callback context if it's specified or as Promise if the callback is omitted.

function readFileAsArray(file, cb = () => {}) {
  return new Promise((resolve, reject) => {
    fs.readFile(file, function(err, data) {
      if (err) {
        reject(err);
        return cb(err);
      }
      const lines = data.toString().trim().split('\n');
      resolve(lines);
      cb(null, lines);
    });
  });
};

This trick is interesting in itself and it shouldn't be used in regular programming practice as it may be confusing.