javascript - Avbryta intervall baserat på ett promise-resultat i Angular


Jag har denna affärslogik där jag vill kontrollera viss data från en tjänst varje sekund, och om den datan returnerar någon egenskap som är sann, vill jag avbryta intervallet. Till exempel:

  someFn() {
    this.interval = setInterval(this.getData, 1000, param1, param2);
  }

  private async getData(param1: string, param2: string) {
    const data = await this.service.getSomeData(param1);
    if (data && receipt.success) {
      console.log('SUCCESS!');
      console.log('Clearing interval', this.interval);
      clearInterval(this.interval);
    }
  }

Men intervallet slutar inte att köras, även om jag går in i if-blocket och SUCCESS skrivs ut. Intervallet verkar vara odefinierat. Jag antar att det beror på någon sorts promise-magi, men jag kan inte riktigt förstå varför. All hjälp uppskattas.

Redigera: Knappen som anropar someFn är denna.

<button class="btn btn-primary" (click)="myService.someFn()">Do Logic</button>

Edit2: Om jag gör console.log(this.interval) inuti someFn-funktionen precis under där jag sätter det, loggar det ett id. Men inuti getData är this.interval undefined.

Svar #1

Jag har listat ut det. Istället för att skicka en referens till setInterval, kör jag funktionen inuti callbacken. Så:

 someFn() {
    this.interval = setInterval(this.getData, 1000, param1, param2);
  }

blir

 someFn() {
    this.interval = setInterval(() => this.getData(param1, param2), 1000);
  }

och det fungerar.