AngularJS Promise - 如果数据仍在加载,则在离开页面时出错

时间:2013-07-10 16:53:39

标签: javascript angularjs promise angular-services

我有一个Angular服务,使用$ q创建一个返回Angular控制器层的承诺。在该服务内部,它对数据进行异步$ http.get请求。

当用户更改到我们Intranet的另一个区域时,他们正在重新加载新页面。该导航操作导致承诺失败(如果您不等待数据异步加载) 我们的应用程序中的承诺失败显示自定义错误消息对话框。

处理此问题的最佳方法是什么?这是一个已知的问题?我们不希望用户在离开页面时看到错误消息。这是因为在导航离开页面时,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;
        }

1 个答案:

答案 0 :(得分:1)

尝试使用onbeforeunload事件,如下所示:

var isUnload;

function getEmployees() {
    var deferred = $q.defer();
    $http.get("/api/employees").success(function(data) {
        deferred.resolve(data);
    }).error(function() {
        if (!isUnload) {
            deferred.reject("An error occurred while retrieving data.");
        }
    });
    return deferred.promise;
}

window.addEventListener("beforeunload", function() {
    isUnload = true;
});