Handling Errors

Sooner or later you're going to create an action that has the potential to fail. Whether theres a fault in the system or you have validation errors you will need a way to handle these errors. Thanks to the HTTP state source returning promises this process is relatively straightforward. All you need to do is add a catch callback to the promise returned from the state source and then deal with the error in there. Marty.createConstants(...) will automatically create a {action type}_FAILED constant for you if you want to dispatch the error to the rest of the system.

var UserActionCreators = Marty.createActionCreators({
  saveUser: function (user) {
    this.dispatch(UserConstants.SAVE_USER, user);

    this.app.userAPI.saveUser(user).then(function () {
      this.dispatch(UserConstants.SAVE_USER_DONE, user);
    }.bind(this)).catch(function (err) {
      this.dispatch(UserConstants.SAVE_USER_FAILED, user, err);
    }.bind(this));
  }
});
class UserActionCreators extends Marty.ActionCreators {
  saveUser(user) {
    this.dispatch(UserConstants.SAVE_USER, user);

    this.app.userAPI.saveUser(user)
      .then(() => this.dispatch(UserConstants.SAVE_USER_DONE, user))
      .catch((err) => this.dispatch(UserConstants.SAVE_USER_FAILED, user, err));
  }
}