Nitpick: on_error doesn't get called if on_result raises