【发布时间】:2016-07-11 14:59:53
【问题描述】:
我有一个 AngularJS 应用程序,我有一个 services 调用 $http 资源并返回一个 promise 我在我的控制器中解析。这是我正在做的一个示例:
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 最好在服务中保留验证、错误美化、链接承诺等,因为您可以使用来自不同控制器的服务,这样您就不会重复代码
-
.then 返回一个新的承诺,因此您不必显式使用
$q服务,因为它基本上是在做同样的事情。 -
@ProfessorAllman 如果我有一些数据按摩逻辑怎么办?就像
$scope.post = someMethod(res.data[0]);或$scope.error = if (res.err.details.code === 400) doThis(); else doThat();这样做被认为是好事
标签: javascript angularjs design-patterns promise