Typescript 跨并发线程使用的类的同一实例

Typescript 跨并发线程使用的类的同一实例,typescript,concurrency,Typescript,Concurrency,我不熟悉Javascript/Typescript环境,如果这是一个基本问题,那么很抱歉。我正在努力理解我们产品中的一些代码 假设我有一些定义如下的类: class Fruit { errors: string[] appleChecker = Apple(this); bananaChecker = Banana(this); // no constructor doStuffOnApples() { ... app

我不熟悉Javascript/Typescript环境,如果这是一个基本问题,那么很抱歉。我正在努力理解我们产品中的一些代码

假设我有一些定义如下的类:

class Fruit {
    errors: string[]
    appleChecker = Apple(this);
    bananaChecker = Banana(this);

    // no constructor

    doStuffOnApples() { 
        ...
        appleChecker.check();
        return this.errors;
    }

    doStuffOnBananas() {
        ...
        bananaChecker.check();
        return this.errors;
    }
}

class Apple {
    fruitChecker: Fruit;
    constructor(fruitChecker: Fruit) {
        this.fruitChecker = fruitChecker;
    }

    check() {
        ...
        this.fruitChecker.errors.push("This apple is dirty");
    }
}

class Banana {
    fruitChecker: Fruit;
    constructor(fruitChecker: Fruit) {
        this.fruitChecker = fruitChecker;
    }

    check() {
        ...
        this.fruitChecker.errors.push("This banana is dirty");
    }
}
上面的内容过于简单,但它代表了我试图理解的类结构。关于上述问题,我有两个问题:

1) 排队

appleChecker = Apple(this);
bananaChecker = Banana(this);
是指
水果的同一个实例,还是指两个不同的实例

2) 假设我定义了
Fruit
的一个实例,因此
fruitChecker=Fruit()
。然后在并发调用中执行以下操作

fruitChecker.doStuffOnApples(apple1);
fruitChecker.doStuffOnApples(apple2);

例如,它可能是并发的,因为API使用两个不同的输入同时调用
FrootChecker.dostufonaples
。我的问题是,
fruitChecker.errors
对象能否在两个调用中共享?

是的,这将引用同一个fruit实例,您可以从两个调用中推送错误

但是,如中所述,doStuff调用将被视为在单个线程中一个接一个地运行它们的部分(可能与其他事件交错)。
.

我被第二个链接弄糊涂了。它说消息排队并运行到完成。一条消息必须在处理下一条消息之前完成。这听起来像Javascript是同步的。那为什么人们总是说Javascript是并发运行的呢?我不是这方面的专家,所以我不知道谁说它是并发的,或者为什么;但我可以想象,这意味着它可以同时完成许多任务(例如,在获取数据时重新渲染)。但是,这可以在不同时运行两个函数的情况下完成,通常是通过回调来完成的——例如,在获取完成后处理函数的各个部分。然后,可以在获取的初始位之后执行渲染调用,同时进行网络调用—提供明显的并发性,同时一次只处理一个调用。