return the recoverWith Future and move the yield out

re-review by @jsuereth