javascript - 刷新 $http Promise 返回的数据

标签 javascript angularjs mongodb rest

我使用 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/

相关文章:

angularjs - AngularJS Java EE Web 应用程序的基本示例和最佳实践

javascript - Firebase 避免多个客户端覆盖/更新同一节点(网络)

javascript - 为什么 MongoDB 不扩展对象以能够使用 a.tojson() 但仍然需要 tojson(a)?

MongoDB 错误代码 16755 - 无法提取地理键和重复顶点

php - 如何在 angularjs 中编辑值(由 PHP 生成)

javascript - GraphQL & 使用嵌套订阅函数

javascript - 更改 CSS 溢出隐藏行为

javascript - 如果 setInterval 内不透明度 == 1,则将变量加 1

ruby-on-rails - Rails 4.1 ActionController::UnknownFormat 错误响应使用 AngularJS

c# - 无法将类型 IEnumerable 转换为 List C#