I would actually suggest the opposite, having had this behaviour originally in Reactor and having to change it to accept nulls after the fact.

The problem is that sometimes you want to complete a Promise with a null value because that's the actual value you want to process. e.g. an event occurred and the value was null. The Promise should be completed and work should continue. That's different than a timeout, which just means nothing happened in that time period.

It's a bit of a pain to have to deal with but we use it frequently and it's actually something we have to test for (to ensure our "completables" (we call them Composables) can handle null values.