this is both good and bad: on one side, this is nice to handle errors as a rejected promise, so that you can handle them in a graceful way; on the other hand, sometimes you just want to throw in that case.

In other JS-based Promises libraries, there is usually a "done" method (instead of "then") that does basically this, but it's not in the ES6 Promise standard.