在node.js中,两个service不能相互调用吗?
      
      
      
    
    这里有两个service,一个是userService,一个是GroupService,他们两个相互引用报错,是因为他们两个相互引用报错? 还是我写的格式不对?
GroupService
Error
      7 回复
    
    ts 完全看不懂啊
建议你去看一下require的加载机制,以及相互引用的问题,一般来说相互引用比如说a依赖b,b依赖a这种会转换为a依赖c,b依赖c
抛开代码不谈,两个模块互相调用会引起加载顺序问题,一般不会这么调用。建议看下require加载机制。
把new Service()放到class里面试试呢?
搞个抽象工厂 + 单利,每个都保存一份实例。
相互依赖会出现这样的情况,因为本身还没有运行完,所以是空的。
~/Desktop/stylus ᐅ ts-node b.ts
b
undefined
a
[Function: a]
~/Desktop/stylus ᐅ ts-node a.ts
a
undefined
b
[Function: b]
a.ts
import { Factory } from './factory'
export class a {
    name: string
    constructor() {
        this.name = "Yugo"
        let b = Factory('b');
        console.log(b);
        let b2 = Factory('b');
        console.log(b === b2);
    }
}
let assss = new a();
b.ts
export class b {
    name: string
    constructor() {
        this.name = "Yugo"
    }
}
factory.ts
import { a } from './a'
import { b } from './b'
let instace = {};
export const Factory = (className) => {
    if (instace[className]) return instace[className];
    console.dir(instace);
    switch (className) {
        case "a":
            instace[className] = new a();
            return instace[className];
        case "b":
            instace[className] = new b();
            return instace[className];
    }
}
import { a } from './a'
import { b } from './b'
let classList = {
     a,
     b
}
interface instaceType {
    a: a,
    b: b
}
let instace: instaceType = {
    a: null,
    b: null
};
type className = keyof instaceType;
export const Factory = (className: className, ...args) => {
    if (instace[className]) return instace[className];
    try{
        let currentClass = classList[className];
        if (!currentClass) throw new Error('not fond class ' + className);
        instace[className] = new currentClass()
        return instace[className];
    }catch(e){
        console.error(e)
    }
}
这个是懒汉模式,也可以自己搞一个饿汉模式。