Javascript AngularJS服务和承诺最佳实践
我有一个AngularJS应用程序,其中我有Javascript AngularJS服务和承诺最佳实践,javascript,angularjs,design-patterns,promise,Javascript,Angularjs,Design Patterns,Promise,我有一个AngularJS应用程序,其中我有服务s,它调用$http资源并返回我在控制器中解析的承诺。下面是我正在做的一个示例: app.service('Blog', function($http, $q) { var deferred = $q.defer(); $http.get('http://blog.com/sampleblog') .then(function(res) { // data massaging stuffs return
服务
s,它调用$http
资源并返回我在控制器中解析的承诺
。下面是我正在做的一个示例:
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');
});
然后在控制器
级别执行验证、错误美化、链接承诺等
我的问题是:在代码弹性和灵活性方面,哪一种被认为是“最佳实践”(如果有的话)?或者有没有更好的方法完全不同于此?根据MVC背后的概念,控制器应该决定如何处理承诺 服务应发起承诺
app.service('Blog', function($http) {
return $http.get('http://blog.com/sampleblog');
});
控制器应决定解决问题时要做什么
$scope.response = Blog;
$scope.response.then(function(response) {
DataProcessor.processData(response.data)
})
.error(function(error){
ErrorHandler.handle(error);
})
IMO最好在服务中保留验证、错误美化、链接承诺等,因为您可以使用来自不同控制器的服务,这样,您就不会重复代码返回一个新的承诺,因此您不必显式使用
$q
服务,因为它基本上在做相同的事情。@ProfessorAllman如果我有一些数据处理逻辑怎么办?比如说做$scope.post=someMethod(res.data[0])被认为是好的
或$scope.error=if(res.err.details.code==400)doThis();否则就不必了代码>我要了。喜欢你介绍DataProcessor
和ErrorHandler
的概念。很公平:)@PrashantGhimire您可以看到这种方法的实用性(我从其他人那里学到了),即控制器可以启动流程,并设置各种标志。然后它可以决定在响应到达时做什么。除非特别需要,否则不应将其打包到服务中。好问题;)