angularjs - Angular JS 从工厂 AJAX 请求中保存信息

标签 angularjs ajax http

我有一个工厂,我在其中使用 $http 方法从服务器获取数据:

.factory('$factory', function ($q, $http, $timeout, $state, $ionicHistory, $localstorage) {
  var obj = [];

  var functions = {
    getData: function () {

      var dfd = $q.defer();
      if(!obj){
        $http({
          url: remoteUrl+'/getdata',
          method: 'POST',
          data: {}
        }).then(function(response) {
          $timeout(function(){
            obj = response.data;
            dfd.resolve(response.data);
          }, 2000)
        }, function(response) {

        }   
      }else{
        return obj;
      }
      return dfd.promise;
    }
  }
}

所以这会获取数据并将其放入一个对象中。如果我错了,请纠正我,但是这种使用工厂来执行此类操作的方法不会绑定(bind)到 Controller ,并且可以在我的应用程序中的任何地方使用。

考虑到这一点,我希望做到这一点,这样我就可以在我的应用程序中的任何地方获取数据,而不必每次都查询服务器。即一旦查询服务器,工厂就会将响应保存到一个对象(就像我现在所做的那样)。但是之后我在另一个 Controller 中访问数据时遇到了问题。

我已经开始使用 if(!obj) 行制作我认为它应该看起来的样子,但在 else 语句中我似乎不能只返回 obj 对象。它会抛出错误,因为它也没有像预期的那样返回 promise 。

我不确定我的想法是否正确。

谢谢

最佳答案

你要返回一个 promise ,所以你需要总是返回一个 promise ,即使是在缓存的响应上,你可以通过将它包装在 $q.when ( https://docs.angularjs.org/api/ng/service/ $q) 中来相对容易地在这个级别上做到这一点,这将返回立即解决的 promise 。

return $q.when(obj);

虽然 $http 服务内置了缓存,所以你可能想看看缓存部分。

https://docs.angularjs.org/api/ng/service/ $http

https://www.ng-book.com/p/Caching/

关于angularjs - Angular JS 从工厂 AJAX 请求中保存信息,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36290848/

相关文章:

javascript - 在 ui-router 中正确加载 Controller 路径

javascript - 执行 JavaScript 时,我可以避免 "white"topBar 吗?

javascript - Vue.js $.ajax() 文档准备好时动态表

php - 使用 php 和 PDO 将数组值插入单个 ID 到 mysql 数据库中

安卓 8 : Cleartext HTTP traffic not permitted

javascript - 在 AngularJS 指令中呈现 SVG 模板

javascript - 在 Angular.js 中的 FineUploader 回调中更新 ngModel

javascript - jquery 调用中的变量。但是jquery函数调用只发生一次

c# - 使用 RestSharp 反序列化来自一个资源的不同数据输出

json - 无法从 Angular InMemoryDbService 中得到任何东西