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