tutorial software instalar guide create apps javascript angularjs promise

javascript - software - instalar angularjs



Angularjs prometen rechazar el encadenamiento (2)

Necesito crear promesas encadenadas:

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 pongo un errorCallback en el primero then , el segundo se resolverá y se llamará su successCallback. Pero si errorHandler , la segunda promesa será rechazada.

Según los documentos de Angular JS, la única forma de propagar el rechazo es devolver $q.reject(); y no parece obvio, especialmente porque tengo que inyectar el servicio $q incluso si no es necesario;

También se puede hacer lanzando una excepción en errorHandler , pero escribe un seguimiento de excepciones en la consola, no es bueno.

¿Hay otra opción para hacer esto de manera clara? ¿Y cuál es la razón? ¿Por qué se hace? ¿En qué caso, el comportamiento actual puede ser útil?


Y cuál es la razón por la que se hace. ¿En qué caso, el comportamiento actual puede ser útil?

Puede ser útil cuando en errorHandler podría intentar reparar el estado de error y resolver la promesa de alguna manera.

var retriesCount = 0; function doWork() { return $http.post(''url'') .then(function(response){ // check success-property of returned data if(response.data.success) // just unwrap data from response, may be do some other manipulations return response.data; else // reject with error return $q.reject(''some error occured''); }) .catch(function(reason){ if(retriesCount++ < 3) // some error, let me try to recover myself once again return doWork(); else // mission failed... finally reject return $q.reject(reason); }); } doWork().then(console.log, console.error);


Tarde a la fiesta, pero como estoy aquí;

Prefiero usar el error $http para su manejo de errores nativo, en lugar de devolver un éxito a través de un 200 y un estado de error en la respuesta.

la impresión de 400 o 500 errores en la consola no es un problema, si está depurando, los verá si no lo hace.

angular.module(''workModule'', []) // work provider handles all api calls to get work .service(''workProvider'', [''$http'', ''$q'', function($http, $q) { var endpoint = ''/api/v1/work/''; this.Get = function(){ // return the promise, and use 404, 500, etc for errors on the server return $http.get(endpoint); }; }]) .controller(''workController'', [''workProvider'', function(''workProvider''){ workProvider.Get().then( function(response){ // success console.log(response.data); }, function(response){ // error console.log(response.data); } ) }])