Promisify

util.promisify: a callback-last function becomes a Promise-returning one. The callback's first argument rejects, its second resolves.

import { promisify } from 'util'

function lookupUser(id: number, cb: (err: Error | null, name: string) => void): void {
  setTimeout(() => {
    if (id === 0) cb(new Error("no user 0"), "")
    else cb(null, "user-" + id)
  }, 1)
}

const lookup = promisify(lookupUser)

async function main(): Promise<void> {
  console.log(await lookup(7))
  try {
    await lookup(0)
  } catch (e) {
    console.log("rejected:", (e as Error).message)
  }
}

main()
View source on GitHubexamples/util/promisify.ts