2016-08-08 11 views
0

Ich bin ziemlich neu in AngularJS und Javascript. Ich erstelle eine App, in der ich plane, eine Funktion zu verwenden, um alle Ajax-bezogenen Operationen auszuführen (Factory in angularjs). Diese Funktion wird nur ein Gateway für alle Ajax-Operationen sein. Wenn ich Versprechen als Erfolg zurückgebe, funktioniert es richtig. aber das Zurückbringen des Fehlerversprechens funktioniert nicht.Rückgabe Fehler durch Versprechen

Hier ist ein Beispielcode. Ich erwarte Rückkehr von Versprechen in Fehlerfunktion, wenn Versprechen nicht, aber es geht zum Erfolg

var myApp = angular.module('myApp', []); 

myApp.controller('FirstController, function($scope, util){ 
     util.doAjax().then(function(response){ 
       // This function is called in both success and error 
      }, function(err){ 
       // This is never called why ?     
      }); 
}); 

myApp.factory('util, function($http){ 
    return $http({ 
     method: 'GET', 
     url: 'http://www.example.com' 
    }).then(function(response){ 
     // This will return success promise 
     return response; 
    }, function(err){ 
     // This should return error promise 
     return err; 
    }); 
}); 
+0

dieser Blogbeitrag kann Ihnen helfen: http://ericnish.io/blog/add-success-and-error-to-angular-promises/ – oguzhan00

Antwort

0

Derzeit sind Sie direkt ein Datum aus Fehlerfunktion zurückkehren, die das Versprechen wird Chaining und es zugrunde liegende .then Methode aufrufe.

Während der Rückkehr ein Fehler, den Sie haben ein Versprechen ablehnen, indem Sie einen neuen benutzerdefinierten Versprechen zu schaffen q mit $

return $q.reject(err) 

Weitere wichtige Sache ist, sollten Sie die Methode in einem Dienst mit Namen erstellen

myApp.factory('util', function($http, $q){ 
//Exposed method 
return { 
    doAjax : function() { 
     return $http({ 
      method: 'GET', 
      url: 'http://www.example.com' 
     }).then(function(response){ 
      // This will return success promise 
      return response.data; // returned data 
     }, function(err){ 
      // return error promise with err object 
      return $q.reject(err); 
     }); 
    } 
    } 
}); 
0

Auf diese Weise geben Sie kein Versprechen ab.

Sie müssen die $ http Versprechen zurückzukehren, anstatt wie so:

myApp.factory('util', function($http){ 

    return { 
     ajax: function() { 
      var httpPromise = $http({ 
       method: 'GET', 
       url: 'http://www.example.com' 
      }); 

     httpPromise.then(function(response){ 
      // This will return success promise 
      // return response; 
     }, function(err){ 
      // This should return error promise 
      // return err; 
     }); 

     return httpPromise;   
    };   
}); 

Und auch, Rückkehr innerhalb Versprechen Auflösungen nicht benötigt werden, können Sie es für loggin und Dinge verwenden können, aber es erfordert keinen Rückgabewert weil es die Auflösung selbst ist.

Verwandte Themen