In comparison to RxJS, Hullo looses schedulers, but gains pressure control.
In RxJS you can pace messages by attaching an alternative scheduler to a subject. Hullo approach is to have a subscriber posting it's readiness to receive new message - every subscriber can do that independently. That caused a slight change in interface:
complete can return either nothing or a
Promise of successful processing received message
complete return a
Promise of successful processing delivered message
You probably noticed
error is missing from
complete functions set. That's not a mistake. Due to additional challenges in typing and keeping focus on resolving failures state resulted in a general design direction of Hullo, were error's should be treated as such only in critical cases like edge communications parsing errors / environmental failures. Such situations should result in a fast and complete failure of entire program, so there's no decision, no interaction made in erroneous state. In other cases, controllable failures should be communicated as messages and handled as soon as possible.