Chaining Angular Versprechen Ablehnungen

Ich habe ein angekettetes Versprechen und muss im Falle einer Ablehnung eines der Versprechen eine asynchrone Operation ausführen (übersetzte Fehlermeldung abrufen). Da ich bereits ein angekettetes Erfolgsversprechen habe, gehe ich davon aus, dass es nicht möglich ist, auch bei Ablehnung zu ketten. Ich versuche, die asynchronen Aufrufe einfach zu verschachteln, erhalte aber nicht das aufgelöste Versprechen von @ zurücdeferred.reject(deferredRejection.promise); unten. Hinweise erwünscht!

login: function(email, password) {
  var deferred = $q.defer();
  AuthService.login(email, password).then(function(response) {
    var user = {
      'accountToken': response.accountToken,
      'email': response.username,
      'onboarded': response.onboarded,
      'verified': response.verified
    };          
    return SyncStorageService.write(SyncStorageService.storageKeys.user, 
        user);  
  }, function(error) {
    // login failed
    var deferredRejection = $q.defer();
    $translate('ALERTS.LOGIN_FAILED').then(function(translatedValue) {
      deferredRejection.resolve(translatedValue);
    });
    deferred.reject(deferredRejection.promise);
  }).then(function(data) {
    deferred.resolve(data);
  }, function(error) {
    // saving data failed
    var deferredRejection = $q.defer();
    $translate('ALERTS.UNKNOWN').then(function(translatedValue) {
      deferredRejection.resolve(translatedValue);
    });
    deferred.reject(deferredRejection.promise);
  });
  return deferred.promise;
}

Aktualisierte Lösung:

Auf der Grundlage der folgenden Antwort konnte ich den Code wie folgt umschreiben:

login: function(email, password) {
  return AuthService.login(email, password).then(function(response) {
    return {
      'accountToken': response.accountToken,
      'email': response.username,
      'onboarded': response.onboarded,
      'verified': response.verified
    };
  }).then(function(data) {
    return SyncStorageService.write(SyncStorageService.storageKeys.user, 
        data);
  });
}

Anmerkungen

BeideAuthService.login undSyncStorageService.write lehne jetzt Versprechen mit einem @ Error Objekt (z. B.new Error('ALERT.ERROR_MESSAGE');), die durch @ sprudelogin an den Controller (hat zuvor die Übersetzung auf Service-Ebene durchgeführt);Der Controller, der das @ aufrulogin Methode hat.then() und.catch() blocks - bei einem .catch () wird das übergebeneError.message wird übersetzt und angezeigt.

Antworten auf die Frage(1)

Ihre Antwort auf die Frage