【发布时间】: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