Usage in Deno
import { callbackify } from "node:util";
callbackify(fn: () => Promise<void>): (callback: (err: ErrnoException) => void) => void
Takes an async
function (or a function that returns a Promise
) and returns a
function following the error-first callback style, i.e. taking
an (err, value) => ...
callback as the last argument. In the callback, the
first argument will be the rejection reason (or null
if the Promise
resolved), and the second argument will be the resolved value.
import util from 'node:util'; async function fn() { return 'hello world'; } const callbackFunction = util.callbackify(fn); callbackFunction((err, ret) => { if (err) throw err; console.log(ret); });
Will print:
hello world
The callback is executed asynchronously, and will have a limited stack trace.
If the callback throws, the process will emit an 'uncaughtException'
event, and if not handled will exit.
Since null
has a special meaning as the first argument to a callback, if a
wrapped function rejects a Promise
with a falsy value as a reason, the value
is wrapped in an Error
with the original value stored in a field named reason
.
function fn() { return Promise.reject(null); } const callbackFunction = util.callbackify(fn); callbackFunction((err, ret) => { // When the Promise was rejected with `null` it is wrapped with an Error and // the original value is stored in `reason`. err && Object.hasOwn(err, 'reason') && err.reason === null; // true });
(callback: (err: ErrnoException) => void) => void
a callback style function
callbackify<TResult>(fn: () => Promise<TResult>): (callback: (err: ErrnoException,result: TResult,) => void) => void
callbackify<T1>(fn: (arg1: T1) => Promise<void>): (arg1: T1,callback: (err: ErrnoException) => void,) => void
callbackify<T1,TResult,>(fn: (arg1: T1) => Promise<TResult>): (arg1: T1,callback: (err: ErrnoException,result: TResult,) => void,) => void
callbackify<T1,T2,>(fn: (arg1: T1,arg2: T2,) => Promise<void>): (arg1: T1,arg2: T2,callback: (err: ErrnoException) => void,) => void
callbackify<T1,T2,TResult,>(fn: (arg1: T1,arg2: T2,) => Promise<TResult>): (arg1: T1,arg2: T2,callback: (err: ErrnoException | null,result: TResult,) => void,) => void
callbackify<T1,T2,T3,>(fn: (arg1: T1,arg2: T2,arg3: T3,) => Promise<void>): (arg1: T1,arg2: T2,arg3: T3,callback: (err: ErrnoException) => void,) => void
callbackify<T1,T2,T3,TResult,>(fn: (arg1: T1,arg2: T2,arg3: T3,) => Promise<TResult>): (arg1: T1,arg2: T2,arg3: T3,callback: (err: ErrnoException | null,result: TResult,) => void,) => void
callbackify<T1,T2,T3,T4,>(fn: (arg1: T1,arg2: T2,arg3: T3,arg4: T4,) => Promise<void>): (arg1: T1,arg2: T2,arg3: T3,arg4: T4,callback: (err: ErrnoException) => void,) => void
callbackify<T1,T2,T3,T4,TResult,>(fn: (arg1: T1,arg2: T2,arg3: T3,arg4: T4,) => Promise<TResult>): (arg1: T1,arg2: T2,arg3: T3,arg4: T4,callback: (err: ErrnoException | null,result: TResult,) => void,) => void
callbackify<T1,T2,T3,T4,T5,>(fn: (arg1: T1,arg2: T2,arg3: T3,arg4: T4,arg5: T5,) => Promise<void>): (arg1: T1,arg2: T2,arg3: T3,arg4: T4,arg5: T5,callback: (err: ErrnoException) => void,) => void
callbackify<T1,T2,T3,T4,T5,TResult,>(fn: (arg1: T1,arg2: T2,arg3: T3,arg4: T4,arg5: T5,) => Promise<TResult>): (arg1: T1,arg2: T2,arg3: T3,arg4: T4,arg5: T5,callback: (err: ErrnoException | null,result: TResult,) => void,) => void
callbackify<T1,T2,T3,T4,T5,T6,>(fn: (arg1: T1,arg2: T2,arg3: T3,arg4: T4,arg5: T5,arg6: T6,) => Promise<void>): (arg1: T1,arg2: T2,arg3: T3,arg4: T4,arg5: T5,arg6: T6,callback: (err: ErrnoException) => void,) => void