のリソースが$http
のリソースを呼び出し、コントローラで解決するを返すAngularJSアプリケーションがあります。ここで私がやっているのサンプルです:AngularJSサービスと約束のベストプラクティス
app.service('Blog', function($http, $q) {
var deferred = $q.defer();
$http.get('http://blog.com/sampleblog')
.then(function(res) {
// data massaging stuffs
return deferred.resolve(res.data);
}, function(err) {
// may be some error message checking and beautifying error message
return deferred.reject(err);
});
// chain if further more HTTP calls
return deferred.promise;
});
をしかし、私は単純にも、次の行うことができます:
app.service('Blog', function($http) {
return $http.get('http://blog.com/sampleblog');
});
をそして時の検証、エラー美化、約束を連鎖などを行いますcontroller
レベル。
私の質問は:コード復元力と柔軟性という点で「ベストプラクティス」と見なされますか?それとも、これとは全く違うやり方があるのでしょうか?
はIMOあなたが別のコントローラからサービスを使用することができますので、あなたがコードを複製していないこのように、サービス中などの検証、エラー美化、連鎖する約束を、残した方が良いです – rpadovani
[.then] (https://docs.angularjs.org/api/ng/service/$q#the-promise-api)は新しい約束を返しますので、 '$ q'サービスを明示的に使用する必要はありません。同じこと。 –
@ProfessorAllmanデータマッサージロジックがあればどうしますか?同様に '$ scope.post = someMethod(res.data [0]);'または '$ scope.error = if(res.err.details.code === 400)doThis();を実行すると良いと考えられます。他にdoThat(); ' –