Angular 角度订阅和读/写相同的变量

Angular 角度订阅和读/写相同的变量,angular,typescript,Angular,Typescript,我用的是角度7 我在x.component.ts文件中有一个全局向量,我有几个订阅,以便从服务器获取一些值 每次brwoser接收到一个值时,该值就会被插入到向量中,并且几个函数(和服务)会计算关于该向量的操作(有时向量会被传递到类似函数的参数) 我有一个疑问:我是否需要锁 我不希望向量“同时”通过两个函数进行读写 我的意思是:我知道javaScript是单线程的,但我不希望为了执行另一个线程的操作而停止该线程,因为如果旧线程不再访问该变量,另一个线程的数据也已准备就绪。就我而言,您的代码中将有

我用的是角度7

我在x.component.ts文件中有一个全局向量,我有几个订阅,以便从服务器获取一些值

每次brwoser接收到一个值时,该值就会被插入到向量中,并且几个函数(和服务)会计算关于该向量的操作(有时向量会被传递到类似函数的参数)

我有一个疑问:我是否需要锁

我不希望向量“同时”通过两个函数进行读写


我的意思是:我知道javaScript是单线程的,但我不希望为了执行另一个线程的操作而停止该线程,因为如果旧线程不再访问该变量,另一个线程的数据也已准备就绪。

就我而言,您的代码中将有两种情况:

1-负责读/写的服务应该为每个向量实例化一次。所以,通过像下面这样限制您的服务可以做到这一点

@Injectable()
export class VectorUpdateService {
  vector: Vector;
  constructor(private vectorService: VectorService) {}
  
  // read vector
  fetchCachedVector(id: number) {
    if (!this.vector) {
      this.vector = this.vectorService.getVectorById(id);
    }
    return this.vector;
  }
}
如需了解更多信息,请联系我们

你也可以这样做

2-处理与您所述相同的操作。据我所知,这种情况与JavaScript中的异步编程非常相似。它通过定义作业和作业队列来处理。你不必担心


我希望我能帮助你。

将操作包装在承诺内