Promise始终返回初始值

时间:2015-11-09 19:37:56

标签: javascript angularjs

在angularjs中承诺有点问题。 我的承诺'得到缓存',意味着他们总是返回他们调用的初始值。我非常熟悉来自其他地方的承诺,但对于angularJS是新手,所以请帮助我阐明我的问题,我可能不会理解这里非常基本的东西

我正在使用工厂:

.factory('Traffic', function ($http) {
    var trafficUrl = 'some url';
    var httpPromise = $http.get(trafficUrl, {cache: false} );
    var invalidateCache = function() {
        return $http.get(trafficUrl, {cache: false} );
    }

    return {
        all: function () {
          httpPromise = invalidateCache();
            return httpPromise
              .then(function (response) {
                //parsing the response and returning stuff (not promise)
        }

    }
})

发送请求,并首次解析它。 现在invalidateCache被某人建议以避免我的问题(每次分配一个新的$http.get以避免它引用相同的初始承诺。)

现在我的控制器: .controller('TrafficCtrl',函数($ interval,$ ionicLoading,$ scope,Traffic){

var getJams = function () {
      var traffic = Traffic.all();
      traffic.then(function (response) {
            //doing stuff with the response
        })
    };

    $scope.refresh = function () {
      getJams();
    }
})

现在,每次调用$scope.refresh方法时,我都会看到项目“刷新”(在getJams内调用console.log),但值仍然是第一个调用getJams()

感谢。

1 个答案:

答案 0 :(得分:1)

从您的评论中,听起来好像浏览器正在缓存您的响应,因此您需要更新服务器逻辑以设置缓存特定标头。

您可能希望在响应中添加以下Cache-Control标头:

缓存控制:无存储,无缓存

有关缓存标头here的更多信息。

应该能够找到大量示例,以您选择的服务器端语言进行设置。

此外,您可以更多地清理代码:

.factory('Traffic', function ($http) {
    var trafficUrl = 'some url';

    return {
        all: function () {
          // don't need the invalidate call anymore
          return $http.get(trafficUrl).then(function (response) {
                //parsing the response and returning stuff (not promise)
        }

    }
})

你的控制器:

var getJams = function () {
      // No need to store the initial promise call, just chain them.
      Traffic.all().then(function (response) {
            //doing stuff with the response
        })
    };