Podążyłem za odpowiedzią stąd: https://stackoverflow.com/a/59346314/12360035 Mam już zaimplementowany zegar Według tej odpowiedzi: https://stackoverflow.com/a/64374454/12360035 Moje rozwiązanie najwyraźniej liczy się tylko do 14 : 59 i utknie tam. Jak to naprawić? Mój HTML:

<p> {{ this.authenticationService.countDown$ | async | date:'mm:ss' }} </p>

Zmieniono timer do następującego kodu, a teraz zaczyna liczyć od 00:00 i natychmiast przeskakuje do 59:00 i zaczyna odliczanie, ale po pewnym czasie zamarza o 00:00. Powinien być odliczanie 15 minut. Mój zmodyfikowany kod:

 StartTimer() {
    this.countDown$ = merge(
      fromEvent(document, 'mousedown'),
      fromEvent(document, 'mousemove'),
      fromEvent(document, 'click'),
      fromEvent(document, 'keydown'),
      fromEvent(document, 'scroll')
    ).pipe(
      startWith(false),
      switchMap(_ => {
        // * 1000 to turn the number into miliseconds
        let counter = (15 * 60 * 1000) + 1;
        return timer(0, 1000).pipe(
          take(counter),
          // count down in ms!!
          map(_ => --counter * 1000),
          tap(null, null, () => {
            console.log('countdown complete');
            // redirect to login page
            window.location.href = 'http://IPHERE:8080/logout';
          })
        );
      })
    );
0
Munchkin 28 październik 2020, 19:20

1 odpowiedź

Najlepsza odpowiedź

W take Używasz milisekundy, musisz tutaj użyć sekund. W map odejmujesz 1 od milisekund, a następnie pomnóż przez 1000, dając mikrosekundom, trzeba dostarczyć właściwe milisekundy tutaj.

Zrobiłbym to tak:

switchMap(_ => {
  let counter = 15 * 60; // seconds
  return timer(0, 1000).pipe(
    take(counter + 1),
    // subtract the seconds that have past and turn the result into milliseconds
    map(t => (counter - t) * 1000),
    tap({
      complete: () => {
        console.log("countdown complete");
        // redirect to login page
        window.location.href = "http://IPHERE:8080/logout";
      }
    })
  );
})
1
frido 28 październik 2020, 21:19