.catch()callback can throw a new error, but if it returns normally, than that return value is used to resolve (fulfill) the associated Promise, and the error stops propagating.
// use second callback parameter to handle errors.
getJSON("/api/user/profile")
.then(doThisIfFulfilled, doThisIfRejected);
// use .catch() (more idiomatic way)
getJSON("/api/user/profile")
.then(displayUserProfile)
.catch(profileError);