AceDevHub
Intermediate Node.js Interview QuestionsIntermediatePractical

Node.js · Question 59

What is util.promisify in Node.js?

Direct answer

util.promisify wraps callback-style functions (err, result) into functions returning Promises — bridge legacy fs.readFile and similar APIs to async/await; prefer native fs.promises where available.

Node's early APIs use error-first callbacks — promisify automates the (err, data) → Promise conversion so modern code avoids callback pyramids without rewriting C libraries.

  • Signature — promisify(fn) returns async function; last arg must not be user callback.
  • Custom promisify — fn[util.promisify.custom] = () => new Promise(...) for odd APIs.
  • fs.promises — built-in Promise fs API; promisify legacy fs.readFile only when needed.
  • promisify vs promisify.setImmediate — rare; default uses microtask/Promise resolution.
promisify.mjs
import { promisify } from "node:util";
import fs from "node:fs";

const readFile = promisify(fs.readFile);

async function loadConfig(path) {
  const raw = await readFile(path, "utf8");
  return JSON.parse(raw);
}

// Preferred today:
// import fs from "node:fs/promises";
// await fs.readFile(path, "utf8");