Skip to content

Promisify a callback-based function

License

Notifications You must be signed in to change notification settings

node-opcua/thenify-ex

This branch is 17 commits ahead of thenables/thenify:master.

Folders and files

NameName
Last commit message
Last commit date

Latest commit

4687240 · Jan 27, 2025

History

51 Commits
Jan 26, 2025
Jan 26, 2025
Jan 26, 2025
Jan 26, 2025
Jan 26, 2025
Jan 26, 2025
Jan 26, 2025
Feb 1, 2016
Jan 27, 2025
Jan 26, 2025
Jan 27, 2025
Jan 26, 2025
Jan 26, 2025

Repository files navigation

thenify-ex

A fork of thenify to support modern CJS/ESM modules with typescript support.

NPM version Build status Test coverage License Downloads

Promisify a callback-based function using any-promise.

  • Preserves function names
  • Uses a native promise implementation if available and tries to fall back to a promise implementation such as bluebird
  • Converts multiple arguments from the callback into an Array, also support change the behavior by options.multiArgs
  • Resulting function never deoptimizes
  • Supports both callback and promise style

An added benefit is that thrown errors in that async function will be caught by the promise!

API

fn = thenify(fn, options)

Promisifies a function.

Options

options are optional.

  • options.withCallback - support both callback and promise style, default to false.

  • options.multiArgs - change the behavior when callback have multiple arguments. default to true.

    • true - converts multiple arguments to an array
    • false- always use the first argument
    • Array - converts multiple arguments to an object with keys provided in options.multiArgs
  • Turn async functions into promises

import { thenify } from 'thenify';

const  somethingAsync = thenify(function somethingAsync(a, b, c, callback) {
  callback(null, a, b, c)
})
  • Backward compatible with callback
import { thenify } from 'thenify';

const somethingAsync = thenify(
  function somethingAsync(a, b, c, callback) {
    callback(null, a, b, c)
  },
  { withCallback: true },
)

// somethingAsync(a, b, c).then(onFulfilled).catch(onRejected);
// somethingAsync(a, b, c, function () {});

or use withCallback()

import { withCallback}  from "thenify";

var somethingAsync = withCallback(function somethingAsync(a, b, c, callback) {
  callback(null, a, b, c)
})

// somethingAsync(a, b, c).then(onFulfilled).catch(onRejected);
// somethingAsync(a, b, c, function () {});
  • Always return the first argument in callback
import { thenify}  from "thenify";

var promise = thenify(
  function (callback) {
    callback(null, 1, 2, 3)
  },
  { multiArgs: false },
)

// promise().then(function onFulfilled(value) {
//   assert.equal(value, 1);
// });
  • Converts callback arguments to an object
import { thenify}  from "thenify";

var promise = thenify(
  function (callback) {
    callback(null, 1, 2, 3)
  },
  { multiArgs: ['one', 'tow', 'three'] },
)

// promise().then(function onFulfilled(value) {
//   assert.deepEqual(value, {
//     one: 1,
//     tow: 2,
//     three: 3
//   });
// });

About

Promisify a callback-based function

Resources

License

Stars

Watchers

Forks

Packages

No packages published

Languages

  • JavaScript 67.8%
  • TypeScript 32.2%