Skip to content

ferrum.async submodule for working with promises #162

Open
@koraa

Description

@koraa

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

Metadata

Metadata

Assignees

No one assigned

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions