比较angularJS中两个API调用的最佳方法?
我的基于API的应用程序有一个AngularJS前端。有一些服务可以进行API调用,例如以下服务。我想比较每个调用中的一个变量: 获取用户数据:比较angularJS中两个API调用的最佳方法?,angularjs,service,api-design,Angularjs,Service,Api Design,我的基于API的应用程序有一个AngularJS前端。有一些服务可以进行API调用,例如以下服务。我想比较每个调用中的一个变量: 获取用户数据: this.getUserData = function () { var apiCall = $http({ method: 'GET', url: 'http://example.com/api/userdata', headers: { 'Authorization': 'Bearer ' + localStorage.
this.getUserData = function () {
var apiCall = $http({
method: 'GET',
url: 'http://example.com/api/userdata',
headers: {
'Authorization': 'Bearer ' + localStorage.getItem('token'),
'Access-Control-Allow-Origin': 'Any'
}
});
return apiCall;
};
获取页面数据:
this.getPageData = function(slug){
var apiCall = $http.get('http://example.com/api/public/page?slug=' + slug, {
headers: { 'Authorization': 'Bearer ' + localStorage.getItem('token') }
}
)
return apiCall;
};
在我的控制器中,我希望比较每个调用的var,如下所示:
if (apiService.getUserData.likes.page_id == apiService.getPageData.page_id){ // do stuff }
考虑到API调用可能需要一段时间,最有效的方法是什么。。我不必每次从API访问变量时都进行API调用,是吗?请记住,这些API调用通常在不同的控制器中进行,因此结果存储在不同的作用域中
基本上,我不知道这些逻辑应该放在控制器、服务本身还是其他地方。任何建议都将不胜感激。谢谢 如果您在控制器中比较它们,您可以很容易地依次调用其中一个并进行比较。既然您说您有一个基于API的应用程序,并且使用来自localStorage的auth令牌,那么您应该在每个不同的控制器中调用该API,以防auth令牌过期或发生其他情况 我很可能会创建一个服务,比如将其刷新到更多,以显示所有片段:
angular.module('app').service('CompareService', CompareService);
CompareService.$inject = ['apiService', '$q'];
function CompareService(apiService, $q) {
return {
arePageIdsEqual: apie
};
function apie() {
var deferred = $q.defer();
apiService.getUserData().$promise.then(function(userData) {
apiService.getPageData().$promise.then(function(pageData) {
deferred.resolve(userData.likes.page_id === pageData.page_id);
}, function(err) {
deferred.reject(err);
});
}, function(err) {
deferred.reject(err);
});
return deferred.promise;
}
}
在您的控制器中,只需注入它,然后像这样调用它:
CompareService.arePageIdsEqual(function(yes) {
if(yes) {
// do something
}
}, function(err) {
// err making the calls
});
你应该用承诺来实现它
function doCompare(userData,pageData){
if (userData.likes.page_id == pageData.page_id){
// do stuff
}
}
var promises = [apiService.getUserData,apiService.getPageData]
$q.all(promises).then(doCompare);
很不错的!需要明确的是,这意味着在我的应用程序中多次调用每个API路由——一次是为了获取控制器所需的API数据,另一次是每次需要比较变量时。这明智吗?这取决于你的申请。如果您已经需要控制器中的数据,您应该调用getUserData和getPageData,然后在它们都返回后进行比较。如果您只需要比较中的真/假,请使用如下服务。第三个选项是在服务器端,您可以在userData上设置一个标志,如userData.hasLikedPage,然后不必在UI上进行比较