one thing i've seen other libraries do is create "handler" functions from arguments.  i.e. "Util" would have a method where we can take any random "onDone"/"onCancel" and adapt the into an *always* ok handler of results or failures (overloaded args).   This could simplify this style code.  Something to keep on the docket of TODOs.