gpt4 book ai didi

javascript - 具有服务依赖性的 $log 装饰器导致循环依赖错误

转载 作者:塔克拉玛干 更新时间:2023-11-02 21:32:49 26 4
gpt4 key购买 nike

在我的应用程序中,我正在为 $log 编写装饰器这样我就可以自定义 $log 的功能包括调用第三方服务。第三方服务注入(inject)$q为其内部事件。现在这会导致循环依赖错误:

Uncaught Error: Circular dependency: $q <- tploggerService <- $log <- $exceptionHandler <- $rootScope .

因为 qProvider使用 exceptionHandlerProvider最终使用 logProvider我想这是造成这个的原因。有没有人在装修时遇到过类似的问题,是否有解决这个问题的解决方案或不同的模式来解决这个问题?

这是一个简单的代码演示,感谢您的帮助:

///Some third party APP
angular.module('SomeThirdPartyApp', []);

tploggerService.$inject = ['$q']; //<-- $q is a dependency

function tploggerService ($q) {

this.info = function (data) {
var deferred = $q.defer(); //Doing something...
//....
//....
};
}

angular.module('SomeThirdPartyApp').service('tploggerService', tploggerService);

///--------------------------------------------------------------------------------
///MY APP
angular.module('decorApp', ['SomeThirdPartyApp']);

angular.module('decorApp').config([
'$provide', function ($provide) {
$provide.decorator('$log', ['tploggerService','$delegate',
function (tploggerService, $delegate) { //<--- Injecting tpLoggerService causes circular dependency error.
var _info = $delegate.info;
//It is no different even if we use $injector
$delegate.info = function(){
var args; //doing something with the arguments basically formatting massaging it.
var customlogmessage; //doing something with args

tploggerService.info(customlogmessage);
_info.apply(null, args);
}
return $delegate;
}]);
}]);

最佳答案

从您的服务内部获取 $q:

function tploggerService ($injector) {
var $q;
this.info = function (data) {
$q = $injector.get('$q');
var deferred = $q.defer(); //Yes using defered object. some this performs some actions and some internal stuffs.

//Doing something...
};
}

Updated Plunk

关于javascript - 具有服务依赖性的 $log 装饰器导致循环依赖错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23416924/

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