gpt4 book ai didi

javascript - Http拦截器工厂导致 "Circular dependency found: factory1 <- $http <- factory2"

转载 作者:行者123 更新时间:2023-12-02 17:54:25 26 4
gpt4 key购买 nike

我有两个工厂:auth_service.jsuser_service.js

我想要实现的目标:

user_service.js

它将像一个 session 管理器,它将存储用户数据信息,以便在整个应用程序中可用。此外,当应用程序第一次运行时,它会向服务器发出 ajax 请求以检查是否有登录用户,尽管我认为该应用程序仅在索引页面上执行此操作。 (这将是另一个问题)

auth_Service.js

这将负责某种用户操作封装,例如登录、注销和 isLoggedIn

这是一个骗子:plunker

虽然在这个笨蛋中我只得到

Circular dependency found: $http <- UserService

在我的应用程序中,这就是我得到的:

Circular dependency found: UserService <- $http <- AuthenticationService

问题出在我的拦截器上,因为我正在拦截 401,并且我注入(inject) UserService 来在出现 401 时注销用户

最佳答案

首先,responseInterceptors 已被弃用。我强烈建议使用拦截器。恕我直言,它们甚至更容易使用。

你的假设是正确的。解决这个问题的一种可能方法是使用事件。

在拦截器中,您注入(inject) $rootScope 而不是 UserService。然后,您不调用服务的方法,而是发出一个事件,例如$rootScope.emit('unsetUser')

在您的 UserService 中,您监听该事件:$rootScope.on('unsetUser', function() {

这样,$http 服务就不知道 UserService,但它们仍然可以通信。

另一个解决方案是创建某种中间服务,将其注入(inject)到两者中。然后,UserService 将自身注册为观察者,拦截器可以调用一个方法,该方法又通知 UserService

关于javascript - Http拦截器工厂导致 "Circular dependency found: factory1 <- $http <- factory2",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21089628/

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