angularjs - que - El método angular $ q.catch() falla en IE8
ng-cloak not working (3)
Estoy experimentando un error extraño en IE8 mientras trato de atrapar un rechazo de promesa (promesa devuelta por una llamada básica de ngResource
):
Este código funciona con la .then(success, fail)
:
promise.then(function(response) {
// success
},
function(response) {
// error
});
pero esta falla con la .then(success).catch(fail)
:
promise.then(function(response) {
// success
})
.catch(function(response) {
// error
});
y el error de IE que apunta a la línea .catch()
es:
Identificador esperado
Estoy haciendo algo mal ? alguien lo reproduce? o es un IE8 común debido a la palabra clave restringida?
Gracias
Necesita usar la notación de corchetes:
promise.then(function(response) {
// success
})
["catch"](function(response) {
// error
});
Esto se debe a que IE8 implementa ECMAScript 3 que no permite palabras clave simples en notación de puntos. Los navegadores modernos implementan ECMAScript 5 que lo permite.
Muchas bibliotecas alias .catch
con otra palabra clave. Sin embargo, la forma en que se construyen las promesas angulares no es simple para extender las promesas de $q
. Entonces ["catch"]
tendría que hacer. Tenga en cuenta que esto también es cierto para finally
.
Sí, IE8 cree que es una palabra clave. Puedes evitar esto de dos maneras:
-
promise.then(function() { })[''catch''](function() { });
-
promise.then(function() { /* success handler */ })).then(null, function() { /* error handler */ });
- O combine el éxito y el error en una declaración
then
, si tal cosa es apropiada:promise.then(function() { /* success handler here */ }, function() { /* error handler here */ });
catch
es la abreviatura de # 2.
http://docs.angularjs.org/api/ng/service/$q#the-promise-api
Debido a que finalmente es una palabra reservada en JavaScript y ES3 no admite las palabras clave reservadas como nombres de propiedad, deberá invocar el método como "promesa final" para que su código IE8 y Android 2.x sean compatibles.
Lo mismo para atrapar