deno.com
function promisify
#promisify<TCustom extends Function>(fn: CustomPromisify<TCustom>): TCustom

Takes a function following the common error-first callback style, i.e. taking an (err, value) => ... callback as the last argument, and returns a version that returns promises.

import util from 'node:util';
import fs from 'node:fs';

const stat = util.promisify(fs.stat);
stat('.').then((stats) => {
  // Do something with `stats`
}).catch((error) => {
  // Handle the error.
});

Or, equivalently using async functions:

import util from 'node:util';
import fs from 'node:fs';

const stat = util.promisify(fs.stat);

async function callStat() {
  const stats = await stat('.');
  console.log(`This directory is owned by ${stats.uid}`);
}

callStat();

If there is an original[util.promisify.custom] property present, promisify will return its value, see Custom promisified functions.

promisify() assumes that original is a function taking a callback as its final argument in all cases. If original is not a function, promisify() will throw an error. If original is a function but its last argument is not an error-first callback, it will still be passed an error-first callback as its last argument.

Using promisify() on class methods or other methods that use this may not work as expected unless handled specially:

import util from 'node:util';

class Foo {
  constructor() {
    this.a = 42;
  }

  bar(callback) {
    callback(null, this.a);
  }
}

const foo = new Foo();

const naiveBar = util.promisify(foo.bar);
// TypeError: Cannot read property 'a' of undefined
// naiveBar().then(a => console.log(a));

naiveBar.call(foo).then((a) => console.log(a)); // '42'

const bindBar = naiveBar.bind(foo);
bindBar().then((a) => console.log(a)); // '42'

Type Parameters #

#TCustom extends Function

Parameters #

Return Type #

#promisify<TResult>(fn: (callback: (
err: any,
result: TResult,
) => void
) => void
): () => Promise<TResult>

Type Parameters #

#TResult

Parameters #

#fn: (callback: (
err: any,
result: TResult,
) => void
) => void

Return Type #

() => Promise<TResult>
#promisify(fn: (callback: (err?: any) => void) => void): () => Promise<void>

Parameters #

#fn: (callback: (err?: any) => void) => void

Return Type #

() => Promise<void>
#promisify<
T1,
TResult,
>
(fn: (
arg1: T1,
callback: (
err: any,
result: TResult,
) => void
,
) => void
): (arg1: T1) => Promise<TResult>

Type Parameters #

#T1
#TResult

Parameters #

#fn: (
arg1: T1,
callback: (
err: any,
result: TResult,
) => void
,
) => void

Return Type #

(arg1: T1) => Promise<TResult>
#promisify<T1>(fn: (
arg1: T1,
callback: (err?: any) => void,
) => void
): (arg1: T1) => Promise<void>

Type Parameters #

#T1

Parameters #

#fn: (
arg1: T1,
callback: (err?: any) => void,
) => void

Return Type #

(arg1: T1) => Promise<void>
#promisify<
T1,
T2,
TResult,
>
(fn: (
arg1: T1,
arg2: T2,
callback: (
err: any,
result: TResult,
) => void
,
) => void
): (
arg1: T1,
arg2: T2,
) => Promise<TResult>

Type Parameters #

#T1
#T2
#TResult

Parameters #

#fn: (
arg1: T1,
arg2: T2,
callback: (
err: any,
result: TResult,
) => void
,
) => void

Return Type #

(
arg1: T1,
arg2: T2,
) => Promise<TResult>
#promisify<
T1,
T2,
>
(fn: (
arg1: T1,
arg2: T2,
callback: (err?: any) => void,
) => void
): (
arg1: T1,
arg2: T2,
) => Promise<void>

Type Parameters #

#T1
#T2

Parameters #

#fn: (
arg1: T1,
arg2: T2,
callback: (err?: any) => void,
) => void

Return Type #

(
arg1: T1,
arg2: T2,
) => Promise<void>
#promisify<
T1,
T2,
T3,
TResult,
>
(fn: (
arg1: T1,
arg2: T2,
arg3: T3,
callback: (
err: any,
result: TResult,
) => void
,
) => void
): (
arg1: T1,
arg2: T2,
arg3: T3,
) => Promise<TResult>

Type Parameters #

#T1
#T2
#T3
#TResult

Parameters #

#fn: (
arg1: T1,
arg2: T2,
arg3: T3,
callback: (
err: any,
result: TResult,
) => void
,
) => void

Return Type #

(
arg1: T1,
arg2: T2,
arg3: T3,
) => Promise<TResult>
#promisify<
T1,
T2,
T3,
>
(fn: (
arg1: T1,
arg2: T2,
arg3: T3,
callback: (err?: any) => void,
) => void
): (
arg1: T1,
arg2: T2,
arg3: T3,
) => Promise<void>

Type Parameters #

#T1
#T2
#T3

Parameters #

#fn: (
arg1: T1,
arg2: T2,
arg3: T3,
callback: (err?: any) => void,
) => void

Return Type #

(
arg1: T1,
arg2: T2,
arg3: T3,
) => Promise<void>
#promisify<
T1,
T2,
T3,
T4,
TResult,
>
(fn: (
arg1: T1,
arg2: T2,
arg3: T3,
arg4: T4,
callback: (
err: any,
result: TResult,
) => void
,
) => void
): (
arg1: T1,
arg2: T2,
arg3: T3,
arg4: T4,
) => Promise<TResult>

Type Parameters #

#T1
#T2
#T3
#T4
#TResult

Parameters #

#fn: (
arg1: T1,
arg2: T2,
arg3: T3,
arg4: T4,
callback: (
err: any,
result: TResult,
) => void
,
) => void

Return Type #

(
arg1: T1,
arg2: T2,
arg3: T3,
arg4: T4,
) => Promise<TResult>
#promisify<
T1,
T2,
T3,
T4,
>
(fn: (
arg1: T1,
arg2: T2,
arg3: T3,
arg4: T4,
callback: (err?: any) => void,
) => void
): (
arg1: T1,
arg2: T2,
arg3: T3,
arg4: T4,
) => Promise<void>

Type Parameters #

#T1
#T2
#T3
#T4

Parameters #

#fn: (
arg1: T1,
arg2: T2,
arg3: T3,
arg4: T4,
callback: (err?: any) => void,
) => void

Return Type #

(
arg1: T1,
arg2: T2,
arg3: T3,
arg4: T4,
) => Promise<void>
#promisify<
T1,
T2,
T3,
T4,
T5,
TResult,
>
(fn: (
arg1: T1,
arg2: T2,
arg3: T3,
arg4: T4,
arg5: T5,
callback: (
err: any,
result: TResult,
) => void
,
) => void
): (
arg1: T1,
arg2: T2,
arg3: T3,
arg4: T4,
arg5: T5,
) => Promise<TResult>

Type Parameters #

#T1
#T2
#T3
#T4
#T5
#TResult

Parameters #

#fn: (
arg1: T1,
arg2: T2,
arg3: T3,
arg4: T4,
arg5: T5,
callback: (
err: any,
result: TResult,
) => void
,
) => void

Return Type #

(
arg1: T1,
arg2: T2,
arg3: T3,
arg4: T4,
arg5: T5,
) => Promise<TResult>
#promisify<
T1,
T2,
T3,
T4,
T5,
>
(fn: (
arg1: T1,
arg2: T2,
arg3: T3,
arg4: T4,
arg5: T5,
callback: (err?: any) => void,
) => void
): (
arg1: T1,
arg2: T2,
arg3: T3,
arg4: T4,
arg5: T5,
) => Promise<void>

Type Parameters #

#T1
#T2
#T3
#T4
#T5

Parameters #

#fn: (
arg1: T1,
arg2: T2,
arg3: T3,
arg4: T4,
arg5: T5,
callback: (err?: any) => void,
) => void

Return Type #

(
arg1: T1,
arg2: T2,
arg3: T3,
arg4: T4,
arg5: T5,
) => Promise<void>
#promisify(fn: Function): Function

Parameters #

#fn: Function

Return Type #

Function
namespace promisify

Variables #

v
promisify.custom

That can be used to declare custom promisified variants of functions.