gpt4 book ai didi

AngularJs 异常处理程序进入无限循环

转载 作者:行者123 更新时间:2023-12-03 21:39:41 24 4
gpt4 key购买 nike

我正在尝试创建一个具有服务器级异常日志记录的 AngularJs 应用程序。

我的代码:

异常处理程序.js

app.config(function($provide){

$provide.decorator("$exceptionHandler", function($injector,$log, ExceptionModel, exceptionService){

return function(exception, cause){
//$log.error.apply( $log, arguments );
var exceptionModel = new ExceptionModel();
exceptionModel.Exception = "Exception";
exceptionModel.Cause = "Cause";
exceptionModel.StackTrace = "StackTrace";

exceptionService.LogException(exceptionModel).
catch(function(){ // do nothing});

};

});

});

异常服务.js
app.service("exceptionService", function ($injector) {

var _logException = function (exception) {
var $httpResource = $injector.get("$resource");
return $httpResource(url, {}).post(exception).$promise;
}
this.LogException = _logException
});

每当上述异常记录 API 不可用(404 错误)时,AngularJs exceptionHandling 就会进入无限循环。有什么我想念的吗?

有没有一种方法可以抑制 AngularJs 中的错误,即在 $exceptionHandler 处,如果在将错误发送到服务器 API 时出现问题或在任何层处理错误时不引发异常。

最佳答案

首先,您不需要为您的服务注入(inject) $injector,您应该能够简单地注入(inject) $resource。我还建议为您的 exceptionService 使用工厂,但您所拥有的将起作用。

如果您遇到无限循环,则返回的方法必须在执行期间抛出错误,然后调用异常处理程序,该处理程序会抛出错误,依此类推。

如果在发布过程中出现问题,不会导致抛出错误。问题可能出在 ExceptionModel 的构造函数中。

我确实注意到 exceptionService 中的变量 url 没有在任何地方定义,这可能会引发错误,除非为清楚起见省略了该部分代码。

此外,post 方法在 $resource 中不可用,它来自 $http。从您的示例看来,您应该从 $resource 切换到 $http,因为您没有将其用作资源:

app.service("exceptionService", function ($http) {
var _logException = function (exception) {
return $http.post(url, exception);
}

this.LogException = _logException;
});

关于AngularJs 异常处理程序进入无限循环,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26357899/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com