我使用 Restful api 从 mongodb 访问 json 数据,我构建了 angularjs 工厂,如下所示:
angular.module('myApp').
factory('usersFactory', function($http, $q){
var deffered = $q.defer();
return {
getUsers: function(){
return $http.get('/api/users/').then(function(result){ deffered.resolve(result); return deffered.promise; });
},
getUser: function(nickname){
return $http.get('/api/users/'+nickname).then(function(result){ deffered.resolve(result); return deffered.promise; });
}
};
}).
controller('MainCtrl', function($scope, usersFactory){
var promise = usersFactory.getUsers();
promise.then(function(response){
//success handler
$scope.users= response.data;
},
function(response){
//error handler
$log.error(response);
});
}).
controller('SecondCtrl', function($scope, usersFactory){
$scope.loadUser = function(){
var promise = usersFactory.getUsers($scope.usersFld);
promise.then(function(response){
//success handler
$scope.user= response.data;
},
function(response){
//error handler
$log.error(response);
});
};
});
当我更改用户时,第一个用户的数据显示问题直到我进行硬刷新(使用 F5)后才显示,任何人都可以解释为什么会发生这种情况吗?数据是否被缓存,因此我需要进行硬刷新才能显示新数据?
最佳答案
您不能重复使用延迟的。您应该看到对 loadUser()
的调用立即返回,因为 Promise 已经得到解决,并且 $scope.user
应该是您最初调用 getUsers()
相反,因为这是它的解决方法。
您可以将 var deferred = $q.defer();
移动到 getUsers()
和 getUser()
函数中并返回直接 Promise,或者只返回 $http.get
的结果,而不必创建自己的 deferred。
getUsers: function() {
var deferred = $q.defer();
$http.get('/api/users/').then(function(result) {
deferred.resolve(result);
}, function(error) {
deferred.reject(error);
});
return deferred.promise; // result will be what you call resolve() with
},
getUser: function(nickname){
return $http.get('/api/users/'+nickname);
}
关于javascript - 刷新 $http Promise 返回的数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27662019/