Угловой $q.сбой метода catch() в IE8
Я испытываю странную ошибку на IE8, пытаясь поймать обещание отклонить (обещание, возвращенное базовым ngResource звонок) :
этот код работает с .then(success, fail) синтаксис :
promise.then(function(response) {
// success
},
function(response) {
// error
});
но это не с .then(success).catch(fail) синтаксис :
promise.then(function(response) {
// success
})
.catch(function(response) {
// error
});
и ошибка IE, указывающая на .catch() строка :
ожидается, идентификатор
Я делаю что-то неправильно ? кто-то воспроизвел его ? или это общий IE8 из-за служебное слово ?
спасибо
3 ответов
вам нужно использовать обозначение скобки:
promise.then(function(response) {
// success
})
["catch"](function(response) {
// error
});
это потому, что IE8 реализует ECMAScript 3, который не позволяет голые ключевые слова в точечной нотации. Современные браузеры реализуют ECMAScript 5, что позволяет это.
много библиотек псевдоним .catch С другого сайта. Однако то, как строятся угловые обещания, не просто продлить $q обещания. Так что ["catch"] придется делать. Обратите внимание, что это также верно для finally.
да, IE8 думает, что это ключевое слово. Вы можете обойти это несколькими способами:
promise.then(function() { })['catch'](function() { });promise.then(function() { /* success handler */ })).then(null, function() { /* error handler */ });- или объединить успех и ошибку в один
thenзаявление, если такая вещь уместна:promise.then(function() { /* success handler here */ }, function() { /* error handler here */ });
catch сокращенно от #2.
http://docs.angularjs.org/api/ng/service / $q#The-promise-api
поскольку, наконец, зарезервированное слово в JavaScript и зарезервированные ключевые слова не поддерживаются в качестве имен свойств ES3, вам нужно будет вызвать метод, такой как promise' finally', чтобы сделать ваш код IE8 и Android 2.X совместимые.
то же самое для catch.