Angularjs promesse rejet de chaînage
J'ai besoin de créer enchaîné promesses:
var deferred = $q.defer();
$timeout(function() {
deferred.reject({result: 'errror'});
}, 3000);
deferred.promise.then(angular.noop, function errorHandler(result) {
//some actions
return result;
}).then(function successCallback(result) {
console.log('what do I do here?');
return result;
}, function errorCallback(result) {
$scope.result= result;
return result;
});
Si je mets un errorCallback dans la première then
, la deuxième then
sera résolu et ses successCallback sera appelée . Mais si je supprime errorHandler
puis la deuxième promesse sera rejetée.
Selon Angular JS docs la seule façon de propager le rejet est de retour $q.reject();
et il ne semble pas évident, surtout parce que j'ai injecter $q
service, même s'il n'est pas nécessaire;
Il peut également être fait par la levée d'une exception dans errorHandler
, mais il écrit exception de trace sur la console, il n'est pas bon.
Est-il une autre option pour cela dans une manière claire? Et quelle est la raison? Pourquoi il est fait? Dans ce cas, le comportement de l'actuelle peut-elle être utile?
Vous devez vous connecter pour publier un commentaire.
Il peut être utile lorsque, en errorHandler vous pouvez essayer de réparer l'erreur de l'état et de résoudre la promesse d'une certaine manière.
.catch(function(){})
au lieu de.then(null, function(){})
La fin de la partie, mais comme je suis ici;
Je préfère utiliser le
$http
erreur de ses natif de la gestion des erreurs, plutôt que de retourner un succès via un200
et un statut de l'erreur dans la réponse.impression
400
ou500
des erreurs dans la console n'est pas un problème, si vous le débogage de vous voir si vous ne le faites pas.return $http.get(endpoint).then(function(response) { return response.data; }, function(error) { return error.data; })
mais lorsqu'une erreur se produit, les données sont transmises à successCallback (première fonction à l'époque() ) au lieu de errorCallback (deuxième fonction à l'époque() ). J'ai essayé de retourner q$.rejeter(erreur.de données) au lieu de retourner une erreur.les données, mais ne fonctionne pas. Pourquoi est-ce arrivé?then
et plutôtsuccess
eterror
rappels. je vais modifier si c'est le cas.return $q.reject(error.data);
à l'intérieur de errorCallback fonction. 🙂 Merci quand même.