約束の拒否(基本的なngResource
呼び出しによって返される約束)をキャッチしようとしているときに、IE8で奇妙なバグが発生しています:
このコードは.then(success, fail)
構文で動作します:
_promise.then(function(response) {
// success
},
function(response) {
// error
});
_
しかし、これは.then(success).catch(fail)
構文で失敗します:
_promise.then(function(response) {
// success
})
.catch(function(response) {
// error
});
_
.catch()
行を指すIEエラーは次のとおりです:
期待される識別子
私は何か間違ったことをしていますか?誰かがそれを再現しますか?それとも、キーワードが制限されているため、一般的なIE8ですか?
ありがとう
角かっこ表記を使用する必要があります。
promise.then(function(response) {
// success
})
["catch"](function(response) {
// error
});
これは、IE8がドット表記で裸のキーワードを許可しないECMAScript3を実装しているためです。最新のブラウザは、それを可能にするECMAScript5を実装しています。
多くのライブラリは、.catch
を別のキーワードでエイリアスしています。ただし、Angular promiseの作成方法は、$q
promiseを拡張するのは簡単ではありません。したがって、["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ではプロパティ名としてサポートされていないため、コードをIE8およびAndroid 2 .x互換。
キャッチについても同じです。