Promisify using es6 Proxies every javascript API with less than 50 lines of code
Switch branches/tags
Nothing to show
Clone or download
Fetching latest commit…
Cannot retrieve the latest commit at this time.
Permalink
Failed to load latest commit information.
test
.eslintrc.yml
.gitignore
.travis.yml
LICENSE
README.md
index.js
package.json

README.md

allora

Build Status

NPM version NPM downloads MIT License

Promisify everything in less than ~50 lines. It can be used to implement promises on any JavaScript object.

Examples

Basic

Or simply:

const w = allora(window)
w.onload.then(() => alert('I am ready!'))

Example in Node:

const allora = require('allora')
const g = allora(global)
Promise.all([
  g.setImmediate(),
  g.setTimeout(200),
  g.setTimeout(400)
]).then(() => done())

Example in browser:

const w = allora(window)
const p1 = w.setTimeout(500)
const p2 = w.setTimeout(5000)
const p3 = w.requestAnimationFrame()

p1.then(() => alert('I am ready'))
p2.then(() => alert('I am late'))
p3.then(() => alert('frame'))

Promise.all([p1, p2, p3]).then(() => alert('We are all done!'))

Clear timers

Thanks to this pull request it's now also possible to clear the timers

const w = allora(window)
const timer = w.setTimeout(3000)
timer.then(_ => console.log('time over'))
// the valueOf call should be not needed here
// but if you are on node, you will need it https://github.com/nodejs/node/issues/7792
clearTimeout(timer.valueOf())

Event streams

Allora does not allow you to do event streams since Promises could be only once fulfilled.

const w = allora(window)
const polling = w.setInterval(3000)
polling.then(() => console.log('This will called only once!!!'))

However my friend @nilssolanki made stroxy to provide an elegant streaming api to any javascript object. I would highly recommend you stroxy if you are looking a lightweight events streaming library similar to allora.

"allora" meaning

"allora" is the Italian 🇮🇹 word for then