2013-07-23 3 views
2

Folks,erreurs de manipulation dans AngularJS

j'ai écrit un service qui va chercher les données de mon serveur de la façon suivante:

myApp.factory('CommonHttpService', function($http, $q){ 
var myUrl; 

return{ 
    query: function(tableName){ 
    //Forming the URl 
    myUrl = baseUrl + "?table=" + tableName; 

    // Create a deferred object 
    var deferred = $q.defer(); 

    //Calling web api to fetch all rows from table 
    $http.get(myUrl).success(function(data){    
     deferred.resolve(data); 
    }).error(function(){ 
     // Sending a friendly error message in case of failure 
     deferred.reject("An Error occured while fetching items"); 
    }); 

    // Returning the promise object 
    return deferred.promise; 


}}); 

Mon contrôleur appelle comme ceci:

// Get entire list 
CommonHttpService.query(tableName).then(function(data) { 
    $scope.list = data;        
}); 

Donc, ma question est, dans tout ce système de choses, je ne suis pas sûr de savoir comment ou comment gérer les erreurs. Est-ce que l'erreur est traitée dans deferred.reject() .. si oui, comment?

Ou est-il géré après le .then() dans le contrôleur.

Idéalement j'exposerons une sorte de message à l'utilisateur comme « Aucune donnée disponible » et l'envoi itnernally les détails d'erreur à l'administrateur ou quelque chose

Ceux qui l'ont fait, cela avant et avoir des petits conseils veuillez les transmettre.

Merci à l'avance.

Répondre

0

attend ensuite deux fonctions est la première et la deuxième est sucess échec

CommonHttpService.query(tableName).then(function(data) { 
     $scope.list = data;        
    },function(error){ 
    alert("error") 
    }); 

You should directly return $http.get which also returns a promise 
--Refactoring --- 
     myApp.factory('CommonHttpService', function($http, $q){ 
    var myUrl; 
    return{ 
     query: function(tableName){ 

     myUrl = baseUrl + "?table=" + tableName; 
     //$http.get also returns a promise 
     return $http.get(myUrl) 

    }}); 

     CommonHttpService.query(tableName).then(function(data) { 
     $scope.list = data;        
    },function(error){alert(error}); 
+0

Merci Ajay .. quel but deferred.reject() servir dans toute l'équation ci-dessus signifie que votre – runtimeZero

+0

deffered.reject promesse a été rejeté qui signifie que la promesse a retourné une erreur, donc la fonction d'erreur de then() sera exécutée si vous faites deffered.resolve qui signifie que la promesse a été résolue avec succès et le code de la fonction sera exécuté –

+0

donc l'erreur (function() {. .} dans http.get est également exécuté et la fonction d'erreur après then() est également exécutée Quel est le tout but d'avoir deux fonctions exécutent sur erreur? – runtimeZero

Questions connexes