Wrap a promise to allow passing callback to
.then
of given promise, also works as normal.then
npm i then-callback --save
For more use-cases see the tests
Basically, you just pass a promise and it returns promise, but
.then
from the returned promise can accept a callback function, instead of two arguments as usual - one for result, one for error.
Notice that it also works as normal.then
if you pass two arguments.
<promise>
{Promise}return
{Promise}
Example
const thenCallback = require('then-callback')
const promise = Promise.resolve(123)
thenCallback(promise).then((err, res) => {
console.log('err:', err) // => null
console.log('res:', res) // => 123
})
// but also works as normal `.then`
thenCallback(promise).then((res) => {
console.log('res:', res) // => 123
}, (err) => {
console.log('err:', err)
})
You just need to wrap a promise, then you can use .then
as usual, or to pass callback-style function to it as first argument.
Example
const fs = require('fs')
const redolent = require('redolent')
const readFile = redolent(fs.readFile)
const thenCallback = require('then-callback')
const thenCallback = require('then-callback')
var promise = readFile('package.json', 'utf8')
promise = thenCallback(promise)
promise.then((err, res) => {
if (err) return console.error(err)
console.log(JSON.parse(res).name) //=> 'then-callback'
})
Otherwise, if you pass two arguments and second is function, it will work as normal .then
.
Example
const thenCallback = require('then-callback')
const NativePromise = require('native-or-another')()
// rejected promise
var promise = NativePromise.reject(new Error('foo bar'))
thenCallback(promise).then(console.log, console.error) //=> Error: foo bar
// resolved promise
var promise = NativePromise.resolve(123)
thenCallback(promise).then(console.log, console.error) //=> '123'
- always-promise: Promisify, basically, everything. Generator function, callback-style or synchronous function; sync function that returns child process, stream or observable; directly passed promise, stream or child process.
- letta: Let's move to promises! Drop-in replacement for
co@4
, but on steroids. Accepts sync, async and generator functions. - native-or-another: Always will expose native
Promise
if available, otherwiseBluebird
but only if you don't give another promise module likeq
orpromise
or what you want. - native-promise: Get native
Promise
or falsey value if not available.
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.