30

promise の拒否 (基本的な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 ですか?

ありがとう

4

3 に答える 3

50

ブラケット表記を使用する必要があります。

promise.then(function(response) {
  // success
})
["catch"](function(response) {
  // error
});

これは、IE8 がドット表記の裸のキーワードを許可しない ECMAScript 3 を実装しているためです。最新のブラウザーは、それを可能にする ECMAScript 5 を実装しています。

多くのライブラリ.catchは、別のキーワードでエイリアスされています。ただし、Angular の promise が構築される方法では、promise を拡張するのは簡単ではありません$q。そう["catch"]しなければならないでしょう。これは にも当てはまることに注意してくださいfinally

于 2014-04-16T09:29:41.650 に答える