【问题标题】:Difference between resource.save() with callback and $promise in ngResource using AngularJS使用AngularJS在ngResource中resource.save()与回调和$promise之间的区别
【发布时间】:2014-06-04 01:08:40
【问题描述】:

这是我的工厂:

// Factory
app.factory('BuildingListService', ['$resource', function($resource) {
  return {
    selectBuilding: function(building, callback) {
        return $resource(window.appSettings.context+'/requests/building')
                   .save(building, callback);
    }
  };
}]);

现在,我认为这两段代码的行为应该相同:

第一:

 $scope.selectBuilding= function(building) {
     BuildingListService.selectBuilding(building, function() {
         $state.go('requests.detail.analystReview');
     });
 });

第二:

 $scope.selectBuilding= function(building) {
    BuildingListService.selectBuilding(building).$promise.then(function() {
       $state.go('requests.detail.analystReview');
    });
 };

但是在第一个状态中,我得到一个竞争条件,服务器在更改状态之前没有完成请求。我有点困惑为什么会这样。我提到的第二种方式没有这样的问题。 $state.go('requests.detail.analystReview'); 是否有理由在服务器完成之前 的第一段代码中被调用?这个真的让我很困惑。

另请注意,解决方案一在 IE 和 FireFox 中运行良好,我开始怀疑存在缓存问题

更新: 所以我已经解决了我的问题,这个问题与缓存有关,IE 缓存有点激进,有时我应该看到这一点。但是我不确定为什么第一次调用会使 IE 比第二次更容易缓存请求。感谢所有看过这篇文章的人。

【问题讨论】:

  • 为什么在第一个示例中不使用 BuildingListService?
  • 对不起,我是凭记忆打错的,这真的很傻,我很确定这不是句法问题。此外,解决方案一适用于 Chrome 和 Firefox

标签: javascript angularjs race-condition angular-ui-router ngresource


【解决方案1】:

可能是您的第一个示例根本不依赖BuildingListService?不应该是这样的吗?:

$scope.selectBuilding = function(building) {
  BuildingListService.selectBuilding(building, function() {
    $state.go('requests.detail.analystReview');
  });
};

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2018-06-01
    • 2016-12-07
    • 1970-01-01
    • 2010-09-26
    • 2020-04-17
    相关资源
    最近更新 更多