It also feels like since the `done`/`fail` handlers once you do have a set of functions is the same in all three cases (the success case above plus these two failure cases), there should be some clever way to factor them all out.