2017-12-09 6 views
0

The deferred antipatternは「忘れられた約束」とも言われていますHERE遅延反パターン、どのように不合格を処理するか?

私も読む:what-is-the-explicit-promise-construction-antipattern-and-how-do-i-avoid-it

とにかく私は$q.defer()を使用して取り除くべきです。

しかし、私は応答を得たケースを処理する方法を理解しておらず、適切なキーがないために拒否する必要があります。

これは私のサービスのメソッドで、コントローラへの約束を返します。

self.findTime = function(data){ 

    var deferred = $q.defer(); 

    apiClient.findTime(data) 
     .then(function (response) { 

     if (response.result !== "success") { 
      deferred.reject(response); 
     } 

     deferred.resolve(response); 
     } 
     , function (error) { 
     deferred.reject(error); 
     console.error(error); 
     }); 

     return deferred.promise; 
}; 

だから私はそれを変更しようとした:

rejectを処理する方法
self.findTime = function(data){  

    return apiClient.findTime(data) 
     .then(function (response) { 

     if (response.result !== "success") { 
      // return WHAT ??? <------------- 
     } 
     return response; 
     } 
     , function (error) { 
     // return WHAT ??? <------------- 
     console.error(error); 
    }); 
}; 

コントローラでは、拒否に私はいくつかの朝のメッセージを表示します。

Service.findTime(data).then(function (response) { 
    // do something 
    }, function (error) { 
     // show warn dialog 
}); 

答えて

1

2つのオプションがあります。

あなたはあなたの決意内からの拒絶約束返すことができます。

return apiClient.findTime(data) 
    .then(function (response) { 
     if (response.result !== "success") { 
      return $q.reject('reason'); // Convert to rejection 
     } 
     return response; 
    }, function (error) { 
     console.error(error); 
     return $q.reject('reason'); // Chain rejection 
    }); 

か、例外をスローすることができます

return apiClient.findTime(data) 
    .then(function (response) { 
     if (response.result !== "success") { 
      throw new Error('reason'); 
     } 
     return response; 
    }, function (error) { 
     console.error(error); 
     throw new Error(error); 
    }); 
関連する問題