Create callback api for given sync function. Guarantee that given function (sync or async, no matter) will always have callback api and will handle errors correctly.
npm i always-callback --save
npm test
For more use-cases see the tests
<fn>
{Function} function to transformreturn
{Function} async function that must have callback
It is useful for control-flow and hybrid APIs
Example
var fs = require('fs')
var alwaysCallback = require('always-callback')
// if sync function given, transform it to async
var parse = alwaysCallback(JSON.parse)
var stringify = alwaysCallback(JSON.stringify)
var readFile = alwaysCallback(fs.readFileSync)
// if asynchronous function given, it remains async
var statFile = alwaysCallback(fs.stat)
parse('{"foo":"bar"}', function (err, res) {
console.log(err) //=> null
console.log(res) //=> { foo: 'bar' }
})
stringify({foo: 'bar', baz: 'qux'}, null, 2, function (err, res) {
//=> it would prettify and stringify json
console.log(err) //=> null
console.log(res)
//=> {
// "foo": "bar",
// "baz": "qux"
// }
})
readFile('./package.json', 'utf8', function (err, res) {
console.log(err) //=> null
console.log(res) //=> { name: 'always-callback', ... }
})
statFile('./package.json', function (err, res) {
console.log(err) //=> null
console.log(res) //=> { dev: 64770, mode: 33204, ... }
})
- make-callback: Make synchronous function to support callback api
- handle-callback: Initial step for creating hybrid APIs, used by
hybridify
. Handle callback in promise - give promise and callback return promise. - handle-arguments: Handles given Arguments object - return separatly last argument (commonly callback) and other arguments as Array. Useful in node-style callback flow.
- manage-arguments: Prevents arguments leakage - managing arguments. From Optimization killers by Petka Antonov.
- is-async-function: Check that given function is async (callback) function or not. Trying to guess that based on check if
callback
orcb
exists in function arguments. - is-sync-function: Opposite of
is-async-function
. Check that given function is synchronous. - is-empty-function: Checks the given function (or fn.toString()) is with empty body - dont have body.
Pull requests and stars are always welcome. For bugs and feature requests, please create an issue.
But before doing anything, please read the CONTRIBUTING.md guidelines.