AngularJS调用$q.reject后未释放回调锁致页面加载异常
问题分析与解决
核心问题
页面一直处于加载状态的原因是错误回调中没有重置控制加载状态的变量。从你的代码来看,成功回调里应该有类似$scope.loading = false的逻辑来关闭加载状态,但错误回调里只调用了toastr,遗漏了这一步,导致页面的加载状态无法被终止。
修正后的控制器代码
service.getData(id).then(function (resp) { // 原有的业务逻辑 $scope.loading = false; // 成功时关闭加载状态 }, function(error) { toastr.error(error.message); // 建议显示错误的具体信息,而非整个error对象 $scope.loading = false; // 新增:错误时同样关闭加载状态 });
额外优化:简化服务端的错误处理
你的服务代码中手动调用$q.reject(error)是多余的——$http返回的Promise在出错时会自动传递错误到下游的回调,不需要手动reject。可以简化为:
function getData(id) { return $http.get(baseURL + "/id").then(function (resp) { return resp.data; }); // 移除错误回调,让错误直接传递到控制器处理 }
内容的提问来源于stack exchange,提问作者user2840073
相关产品推荐
相关产品推荐

