我被教導說我們使用工廠/服務來消除重複編碼。這是一部分工作正常的代碼。爲什麼我們在Angularjs中使用工廠/服務進行ajax調用?
app.controller('ServicesCtrl',['$scope','DataFactory',function($scope,$http,DataFactory){
DataFactory.GetData('services1.json')
.then(function(response){
$scope.returnedData = response.data;
})
.catch(function(response){
console.log('Error in process',response.status,response.data);
});
}]);
app.controller('ContactCtrl',['$scope','DataFactory', function($scope,DataFactory){
DataFactory.GetData('location.json')
.then(function(response){
$scope.returnedData = response.data;
})
.catch(function(response){
console.log('Error in process',response.status,response.data);
});
}]);
app.factory('DataFactory',['$http',function($http){
var factory = {};
factory.GetData = function(path) {
return $http.get(path);
}
return factory;
}]);
我的問題是1.爲什麼使用服務/廠家做出這樣的AJAX調用的時候,我們必須在內部控制器的承諾的工作?我的意思是,我必須在這兩個控制器中進行相同的調用。然後調用.catch。它的效率在哪裏?有沒有更好的方法來做到這一點?或者我做錯了什麼?是否有可能在工廠內處理這些承諾並將response.data返回給不同的控制器?
這是可能的緩存服務的承諾。否則,JavaScript是單線程的。函數只能返回立即可用的數據或者返回一個* pending * promise,這個promise將在未來的時間被解析完成或被拒絕。 – georgeawg