working que not ie11 example defer cloak angularjs internet-explorer internet-explorer-8 promise angular-promise

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:

  1. promise.then(function() { })[''catch''](function() { });
  2. promise.then(function() { /* success handler */ })).then(null, function() { /* error handler */ });
  3. 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