First, thanks for the comment. It's not really a reinvention of the async module in that there's no "order of execution" specified by the author. Things get executed as data becomes available. Think of it more as "I need these signals to be ready and then I can transform them into this other set of signals". You end up in a situation where you're defining functions that do very specific tasks and produce output. They can be called multiple times if necessary within the context of producing an output or just once. The other part of this is that if any of them throws an exception or has an error you get a nice output to the console "Function suchAndSuch threw an exception (the exception) on inputs {a json object of the inputs}". Much nicer to deal with than the errors you get from callbacks. I'm not sure I understand what you mean by "if/when/each" logic. You can handle all of those in this as far as I can tell between producing values which get consumed by something else (each) and filtering via "enter" (if/when).Amir