我有一个 Angular 服务,它使用 $q 创建一个返回到 Angular 控制器层的承诺。在该服务内部,它对数据发出异步 $http.get 请求。
当用户切换到我们 Intranet 的另一个区域时,他们正在重新加载一个新页面。该导航操作会导致 Promise 失败(如果您不等待数据异步加载) 我们的应用程序中的 Promise 失败会显示一个自定义错误消息对话框。
处理这个问题的最佳方法是什么?这是一个已知的问题?我们不希望用户在离开页面时看到错误消息。这是因为在离开页面时 XMLHttpRequests 在幕后被取消了吗?
控制器代码:
$scope.showEmployees = function() {
employeeService.getEmployees().then(function(data) {
$scope.employees = data;
}, function(errorMessage) {
alertMessage(errorMessage);
});
};
服务代码:
getEmployees: function() {
var deferred = $q.defer();
$http.get("/api/employees").success(function(data) {
deferred.resolve(data);
}).error(function() {
deferred.reject("An error occurred while retrieving data.");
});
return deferred.promise;
}