Allora – Use promises on any JavaScript object
github.com
github.com
Thus promisifying of window.setInterval() and window.requestAnimationFrame() is very questionable.
The same applies to possibly repeatable .onXXXX() methods.
2.2.2 If onFulfilled is a function:
...
2.2.2.3 it must not be called more than once.
https://promisesaplus.com/But a Promise.all method, while outside the A+ spec, conventionally returns a promise for the resolution of all promises in the array passed as an argument; if all those promises are fulfilled, so will be the promise returned by .all, while if any of them is rejected, so will be the etc., etc.
So the browser example given in the Allora Github readme is perfectly reasonable. It's the exact same kind of thing you do when, for example, you need to await the completion of multiple separate HTTP requests in order to do something with all of their results. While, again, .all isn't part of the A+ standard, this is perfectly conventional and unremarkable behavior; not only is it unsurprising to see in a library like this one, it would be exceptional in its absence if it weren't there.
That said, I would be curious to see Allora compared with, for example, Bluebird's "promisifyAll" method, which appears to do much the same thing.
thatWindow.setInterval(100).then( foo )
mean exactly? How many times the foo() will be called? And how to stop that interval? promisifiedWindow.setInterval(200).then(x => console.log("res:", x));
-> Promise {[[PromiseStatus]]: "pending", [[PromiseValue]]: undefined}
>> VM310:1 res: undefined
How do you cancel the interval?Also, it's async/await ready:
const allora = require('allora')
const myGlobal = allora(global)
async function foo() {
console.log("start")
await myGlobal.setTimeout(2000)
console.log("end")
}
foo()Promise is pretty easily polyfilled for older browsers; proxies are more problematic and I don't know whether or not any of the existing proxy polyfills will work with Allora.
On https://www.netmarketshare.com combined IE market share is 31% and Edge is 5%.