Open
Description
We should provide a support module for working with promises.
// Can be imported by path and using destructuring
const { fork } = require('ferrum/async');
const { async: { fork } } = require('ferrum');
// Promise constructor as a free function
const makePromise = builder(Promise);
// Mostly useful as an annotation in code that this starts a new fiber
const fork = (fn) => Promise.resolve(fn(v));
// Fork from a sequence; useful because Promise.all cannot be used as a free function; needs a better name
const parallel = (seq) => Promise.all(iter(seq));
// Iterate over a sequence of promises in the order they resolve (multiple races). Returns async iterator (needs better name)
const race_all = …
const race = (seq) => Promise.race(iter(seq));
// Promise with resolve/reject
class Barrier extends Promise{
constructor(fn /* maybe null */) {}
resolve(v) {}
reject(v) {}
intoPromise() {}
};
// WaitEvent
const waitEvent = (emitter, eventName) => makePromise((res) =>
class Channel {
constructor
}
Functions from: https://github.com/adobe-rnd/helix-harmonicabsorber/blob/master/src/asyncio.js