Extends
letta
to accept and handles more than functions only. Handles all kind of results fromletta
. Basically, creating promise from everything - strings, arrays, objects, functions, generators, generator functions, promises, streams, child processes, observables, maps, symbols, dates and etc.
npm i letta-value --save
For more use-cases see the tests
[val]
{Mixed} believe me, everythingreturn
{Promise}
Example
const lettaValue = require('letta-value')
// strings
lettaValue('foo bar').then(res => {
console.log(res) // => 'foo bar'
})
// numbers
lettaValue(123).then(res => {
console.log(res) // => 123
})
// errors
lettaValue(new Error('foo err'))
.catch(err => {
console.error(err.message) // => 'foo err'
})
// functions
lettaValue(function noopFn () {})
.then(res => {
// res is the noop function
// it won't be executed or anything
console.log(res.name) // => 'noopFn'
}, console.error)
Meant to be used with letta
, because letta
accepts only function type.
The following is always-done
package, which is completely built on top of letta
and letta-value
var letta = require('letta')
var lettaValue = require('letta-value')
module.exports = function alwaysDone (val) {
if (typeof val === 'function') {
return letta.apply(this, arguments).then(lettaValue)
}
return lettaValue(val)
}
And few examples. For more see the documentation, examples and tests of always-done
.
const fs = require('fs')
const alwaysDone = require('always-done')
Reading file as buffer with core module function fs.readFileSync
.
This example also shows correct handling of optional arguments.
alwaysDone(fs.readFileSync, 'package.json')
.then(res => {
console.log(Buffer.isBuffer(res)) // => true
}, console.error)
alwaysDone('{"foo":"bar"}')
.then(JSON.parse)
.then(data => {
console.log(data) // => { foo: 'bar' }
}, console.error)
alwaysDone(JSON.stringify, {foo: 'bar'}, null, 2)
.then(data => {
console.log(data)
// =>
// {
// "foo": "bar"
// }
}, console.error)
alwaysDone(fs.readFileSync, 'package.json', 'utf8')
.then(JSON.parse)
.then(data => {
console.log(data.name) // => 'pkg-name'
}, console.error)
- 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. - redolent: Simple promisify a callback-style function with sane defaults. Support promisify-ing sync functions.
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.