> throw makes more sense to me. With next(error) it required a lot more code to return at the right time.

Yeah feels more natural to me too, though I've read a few things that say return next(err) is the preferred approach, presumably because it's more in-line with the async style.