Угловой $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.