当前位置: 首页 > 知识库问答 >
问题:

在服务相互调用时检测到循环依赖关系

皇甫心思
2023-03-14

我有两个服务组件:PromiseService。服务ts(处理延迟调用和异步调用)

@Injectable()
export class PromiseService{
    constructor(private staffservice: StaffService) {}
    defercall(asyncCalls, syncCalls) {
        return new Promise((resolve, reject) => {
        const promises = asyncCalls.map(function(val){return val();});
        Promise.all(promises).then(result => {
            resolve(result); });
        });
    }
}

和员工ervice.service.ts(处理员工信息)

@Injectable()
export class StaffService{
    constructor(private promises: PromiseService) {}
    updateStaffInfo(){
        this.promises.defercall(this.updateid, this.updateaddress);
    }
    updateid() {
    }
}

但是,我得到了以下错误:

检测到循环依赖关系:员工ervice.service.ts-

我试图更改Promise Service组件并删除以下行:

但是,出现了另一个错误:未处理的promise拒绝:无法读取未定义的属性“updateid”;区域:;任务:promise。然后值:TypeError:无法读取未定义的属性“updateid”

如何让promise服务认识到“这”是指员工服务?我已经被这个错误卡住一周了。谢谢你!

更新:谢谢你的回复。我已删除PromiseService中的StaffService声明,更新后的StaffService类型脚本为:

@Injectable()
export class StaffService{
    staffid: any;
    staffaddress: any;
    constructor(private promises: PromiseService){}
    updateid(id) {
        this.staffid = id;
    }
    updateStaffInfo() {
        promises.defercall(this.updateid, this.updateaddress);
    }
    updateaddress(address) {
        this.staffaddress = address;
    }
}

但是当我运行应用程序(ng service)时,会出现以下错误:

未处理的promise拒绝:无法读取未定义的属性'updateid';区域:;任务: Promise.then;值:类型错误:无法读取未定义的属性'updateid'

未处理的promise拒绝:无法读取未定义的属性'更新地址';区域:;任务: Promise.then;值:类型错误:无法读取未定义的属性'更新地址'

非常感谢你。

共有2个答案

陆弘光
2023-03-14

你的代码出错了,这是什么this.updateid?如果你像这样引用它,它被称为变量,但你没有被定义为任何变量。

无法读取未定义的属性updateid

你必须参考像这样使用的方法<代码>这个。updateid()确保该方法返回一些值。如果不返回值,则仍将发生未定义错误。另外,您的方法没有实现。

您的PromiseService服务文件不需要这样声明。请移开。

constructor(private staffservice: StaffService) {}

请解决这个问题,然后跑一次,让我知道。

颜经艺
2023-03-14

改变

constructor(private staffservice: StaffService) {}

constructor() {}

您的promise服务不需要依赖于业务服务。

 类似资料:
  • 问题内容: 我已经搜索了很多,但是我发现的主要是python中的递归编程示例。因此,问题来了: 我该如何实现? 问题答案: 一切在Python中都是动态的-甚至是类声明。在初始声明之后,没有什么可以阻止您修改类的内容的: 注意:如果您不太熟悉Python,则该关键字仅允许您说“这里什么都没有”-除非A类的空值与本例中的一样空,否则它并不重要!

  • 我有一个简单的类,如下所示: 但我收到以下错误消息: 检测到服务“App\Algorithm\Calculator”的循环引用,路径:“App\Algorithm\Calculator”- MatchService.php 问题是,但我到底做错了什么?

  • 问题内容: 您如何初始化此: DI框架,反思,更好的设计? 动机和用例(添加) : 我的特殊用例是简化和的子类中的字段访问。因此,我将它们注入以通过派生类中的字段短期引用它们,而无需在每个子类中显式声明。 问题答案: 您可以使用工厂方法

  • 我知道循环依赖通常是不被鼓励的——然而,在C#和TypeScript中,我有时发现它们很有用。这可能是因为我缺乏python方面的经验,也可能是因为我的思维方式不对,或者是因为我没有找到谷歌应该使用的词语。我将如何解决以下问题? 我试图创建一个处理请求的类,每个处理事件都伴随着一个上下文。所以,我想创建handler类和context类,但它们是依赖的,linter在第2行给了我问题,说Handl

  • 问题内容: 我是一个长期的python开发人员。我正在尝试Go,将现有的python应用程序转换为Go。它是模块化的,对我来说真的很好用。 在Go中创建相同的结构后,我似乎陷入了周期性的导入错误,这比我想要的要多得多。从未在python中出现任何导入问题。我什至不必使用导入别名。所以我可能有一些在python中不明显的周期性导入。我实际上发现那个奇怪。 无论如何,我迷路了,试图在Go中修复这些问题

  • 我花了5个多小时试图解决这个问题。有什么问题吗? 我补充道: 组织。格拉德尔。configureondemand=true 但问题依然存在 建筑gradle(模块:应用程序) 建造。gradle(项目:myproject) //顶级构建文件,您可以在其中添加所有子项目/模块通用的配置选项。