Угловая подписка и чтение / запись одной и той же переменной

#angular #typescript

#angular #typescript

Вопрос:

Я использую Angular 7.

У меня есть глобальный вектор в файле x.component.ts, и у меня есть несколько подписок, чтобы получить некоторые значения с сервера.

Каждый раз, когда пользователь получает значение, значение вставляется в вектор, и несколько функций (и сервисов) вычисляют операции с вектором (иногда вектор передается функции как параметр).

У меня есть сомнения: мне нужно поставить какие-то блокировки или нет?

Я не хочу, чтобы вектор считывал и записывал двумя функциями «одновременно».

Я имею в виду: Я знаю, что JavaScript является однопоточным, но я не хочу, чтобы этот поток останавливался для выполнения других операций, потому что другие данные также готовы, если старый поток больше не обращается к этой переменной.

Комментарии:

1. Перенос операций внутри Promise

Ответ №1:

Насколько я понимаю, в вашем коде было бы два сценария:

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. Это обрабатывается путем определения задания и очереди заданий. Вам не нужно беспокоиться об этом.

Я надеюсь, что смог вам помочь.