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