1. ホーム
  2. angularjs

[解決済み] Angular HttpPromise: `success`/`error` メソッドと `then` の引数の違い。

2022-04-21 15:39:16

質問

によると AngularJSのドキュメント への呼び出しは $http は以下を返します。

を返します。 約束 オブジェクトに、標準的な では メソッドと 2 つの http 固有のメソッドがあります。 成功 エラー . その では メソッドは2つの引数を取ります。 成功 エラー コールバックが呼び出され、レスポンスオブジェクトが返されます。また 成功 エラー メソッドはひとつの引数、つまりリクエストが成功したときと失敗したときにそれぞれ呼び出される関数を受け取ります。これらの関数に渡される引数は、then メソッドに渡されるレスポンスオブジェクトの非構造化表現です。

はともかくとして response オブジェクトは、あるケースでは構造化されていますが、あるケースでは構造化されていません。

  • の引数として渡される成功/エラーコールバックを指定します。 promise.then
  • の引数として渡されるコールバックは promise.success / promise.error プロミスのメソッド

あるのでしょうか?一見同じように見えるコールバックの受け渡しを、この2つの異なる方法で行うことに何の意味があるのでしょうか?

どのように解決するのですか?

NB この回答は、以下のコメントで指摘されているように、事実と異なるものです。 success() は元の約束を返します。 私は変更せず、OPの編集に任せます。


この2つの大きな違いは .then() の呼び出しはプロミス(コールバックから返された値で解決)を返すのに対し .success() はより伝統的なコールバックの登録方法であり、プロミスを返しません。

プロミス型コールバック( .then() を使用すると、プロミスを簡単に連鎖させることができます(呼び出しを行って、結果を解釈して その後 別の呼び出しを行い、結果を解釈し、さらに別の呼び出しを行うなど)。

.success() メソッドは、プロミスAPIを連鎖的に呼び出したり操作したりする必要がない場合(例えばルーティングなど)に、合理的で便利なメソッドです。

要するに

  • .then() - promise API の全機能を利用できるが、若干冗長になる
  • .success() - はプロミスを返しませんが、少し便利な構文を提供します。