1. ホーム
  2. angularjs

[解決済み] AngularJSのプロミスでsuccess/error/finally/catchを使用する。

2022-09-11 17:47:45

質問

私は $http を使用していますが、返されたプロミスをどのように使用し、エラーを処理するかについてよくわかりません。

私はこのコードを持っています。

$http
    .get(url)
    .success(function(data) {
        // Handle data
    })
    .error(function(data, status) {
        // Handle HTTP error
    })
    .finally(function() {
        // Execute logic independent of success/error
    })
    .catch(function(error) {
        // Catch and handle exceptions from success/error/finally functions
    });

この方法が良いのか、それとももっと簡単な方法があるのでしょうか?

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

プロミスはステートメントを抽象化したもので、非同期コードで同期的に表現することを可能にします。1回限りのタスクの実行を表します。

また、例外処理も可能で、通常のコードと同様に、プロミスから戻ることも、投げることもできます。

同期コードで欲しいのは

try{
  try{
      var res = $http.getSync("url");
      res = someProcessingOf(res);
  } catch (e) {
      console.log("Got an error!",e);
      throw e; // rethrow to not marked as handled
  }
  // do more stuff with res
} catch (e){
     // handle errors in processing or in error.
}

プロミスの方は非常に似ています。

$http.get("url").
then(someProcessingOf).
catch(function(e){
   console.log("got an error in initial processing",e);
   throw e; // rethrow to not marked as handled, 
            // in $q it's better to `return $q.reject(e)` here
}).then(function(res){
    // do more stuff
}).catch(function(e){
    // handle errors in processing or in error.
});