需要解决未定义的问题

问题描述 投票:0回答:1

我具有以下类结构。

EmployeeService.js

const {EmployeeRequestExecutor} = require('./EmployeeRequestExecutor');

class EmployeeService {
    fulfill(request){
        EmployeeRequestExecutor.delegateEmployeeRequest(request);
    }
}

module.exports = {EmployeeService};

EmployeeRequestExecutor.js

const {HelpfulEmployee} = require('./HelpfulEmployee');

class EmployeeRequestExecutor {
    static delegateEmployeeRequest(request){
        let employee = new HelpfulEmployee();
        employee.work(request);
    }

    static executeEmployeeRequest(request){
        console.log('Executed', request);
    }
}

module.exports = {EmployeeRequestExecutor};

HelpfulEmployee.js

const {EmployeeRequestExecutor} = require('./EmployeeRequestExecutor');

class HelpfulEmployee {
    work(request){
        EmployeeRequestExecutor.executeEmployeeRequest(request);
    }
}

module.exports = {HelpfulEmployee};

如果这样做的话

let employeeService = new EmployeeService();
employeeService.fulfill(request);

我们得到TypeError:无法读取helpedEmployee.js中未定义的属性“ executeEmployeeRequest”:5:33

为什么在EmployeeRequestExecutor内部使用这样的调用结构HelpfulEmployee.js却未定义?

javascript node.js ecmascript-6 require
1个回答
1
投票

[HelpableEmployee和EmployeeRequestExecutor之间存在循环依赖关系(它们都彼此需要)。大多数情况下,循环依赖导致类设计问题。要修复它们,您应该重新考虑对象之间的信息流。

这是一个选项,但还有更多:

const {HelpfulEmployee} = require('./HelpfulEmployee');

class EmployeeRequestExecutor {
    static delegateEmployeeRequest(request){
        let employee = new HelpfulEmployee();
        let requestExecutor= new EmployeeRequestExecutor();
        employee.work(request, requestExecutor);
    }

    executeEmployeeRequest(request){
        console.log('Executed', request);
    }
}

module.exports = {EmployeeRequestExecutor};
class HelpfulEmployee {
    work(request, requestExecutor){
        requestExecutor.executeEmployeeRequest(request);
    }
}

module.exports = {HelpfulEmployee};
© www.soinside.com 2019 - 2024. All rights reserved.