web-dev-qa-db-ja.com

AngularJS $ httpの成功/エラーメソッドが非推奨になったのはなぜですか? v1.6から削除されましたか?

AngularJSのドキュメントには、$httpsuccessおよびerrorメソッドの廃止通知があります。この抽象化がライブラリから削除された具体的な理由はありますか?

54
philoniare

問題は、.successおよび.errorメソッドがチェーン可能でないである。これはchainingに精通している人々に問題を引き起こし、chainingdeferred anti-pattern を使用するStackOverflowのすべての例をご覧ください。

AngularJSチームの1つを引用するには:

IMO .success.errorは、そもそもAPI設計の悪い部分でした。この問題は、.success.error.thenと同じように機能すること、またはその逆を期待するために開発者が混乱する多​​くの状況を強調しています。完璧な世界では、これらの$http固有の「約束」を捨てるだけです。代わりに、開発者に標準の$q promise API .thenおよび.catchの使用を奨励することができます。応答オブジェクトを操作するよりも、明示的なパラメーターを操作する場合のIMOの利点はほとんどありません。

-AngularJS Issue#10508 $http.success/.error.thenの動作とは異なります。

廃止のお知らせ(v1.5)

$httpレガシー約束メソッドsuccessおよびerrorは非推奨になりました。代わりに標準のthenメソッドを使用してください。 $httpProvider.useLegacyPromiseExtensionsfalseに設定されている場合、これらのメソッドは$http/legacyエラーをスローします。

— AngularJS $ httpサービスAPIリファレンス-廃止のお知らせ


更新

非推奨の.successおよび.errorメソッドは、AngularJS 1.6から削除されました。

b54a39 により、$httpの非推奨のカスタムコールバックメソッド-.success()および.error()-は削除されました。代わりに標準の.then()/.catch() promiseメソッドを使用できますが、メソッドのシグネチャと戻り値が異なることに注意してください。

$http(...)
  .then(function onSuccess(response) {
    // Handle success
    var data = response.data;
    var status = response.status;
    var statusText = response.statusText;
    var headers = response.headers;
    var config = response.config;
    ...
  }).catch(function onError(response) {
    // Handle error
    var data = response.data;
    var status = response.status;
    var statusText = response.statusText;
    var headers = response.headers;
    var config = response.config;
    ...
  });

— AngularJS開発者ガイド-v1.6への移行-http

80
georgeawg

Promiseに関連して使用するJavaScriptのパターンは.then(successCallback, errorCallback)のみであるため、おそらくjsパターンを使用することを目指しています。

1
Igor Santana