Fail fast all the time, but have a method to explicitly state that you intend to handle a rejection in a future turn of the event loop. You could perhaps only throw if a rejection is not handled for say 1 second.