typescript - Angular abonner og les/skrive samme variabel


Jeg bruker Angular 7.

Jeg har en global vektor i x.component.ts-filen, og jeg har flere abonnementer for å få noen verdier fra serveren.

Hver gang nettleseren mottar en verdi, blir verdien satt inn i vektoren, og flere funksjoner (og tjenester) utfører beregninger med vektoren (noen ganger blir vektoren sendt som parameter til en funksjon).

Jeg har et spørsmål: Jeg trenger å sette noen låser eller ikke?

Jeg ønsker ikke at vektoren skal leses og skrives av to funksjoner «på samme tid».

Jeg mener: Jeg vet at JavaScript er en-trådet, men jeg ønsker ikke at den tråden skal stoppe for å utføre andre operasjoner fordi andre data også er klare, selv om den gamle tråden ikke lenger bruker denne variabelen.

Svar #1

Så vidt jeg er bekymret, ville det være to scenarier i koden din:

1- Tjenesten, som er ansvarlig for å lese/skrive, bør instansieres en gang for hver vektor. Så ved å begrense tjenesten din som vist nedenfor kan det gjøres

@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;
  }
}

For mer info, flere tjenesteinstanser (sandboxing) kan være nyttig.

Du kan også gjøre det ved hjelp av Singleton-designmønsteret.

2- Håndtering av de samme operasjonene som du nevnte. Så vidt jeg vet, er denne saken veldig lik asynkron programmering i JavaScript. Det håndteres ved å definere en jobb og en jobbkø. Du trenger ikke å bekymre deg for det.

Jeg håper jeg kunne hjelpe deg.