Как делать запросы, используя rx js в определенное время? - PullRequest
0 голосов
/ 23 января 2020

Мне нужно сделать запрос три раза в день в определенное время (8 утра, 12 утра, 4 вечера). Каков наилучший способ реализовать это?

Ответы [ 2 ]

0 голосов
/ 23 января 2020

Это похоже на странное требование для задачи JS, и я думаю, что вам лучше заняться созданием задачи Cron для этого. Но для примера вот как вы можете это сделать:

import { of, Observable, timer, EMPTY } from "rxjs";
import { map, filter, timestamp, switchMap } from "rxjs/operators";

type Hour = number;
type Minutes = number;

const atTimes = (times: [Hour, Minutes][]): Observable<[Hour, Minutes]> =>
  timer(0, 1000 * 60).pipe(
    switchMap(() => {
      const date: Date = new Date();
      const [currentHour, currentMinutes] = [
        date.getHours(),
        date.getMinutes()
      ];

      const time = times.find(
        ([hour, minutes]) => hour === currentHour && minutes === currentMinutes
      );

      if (!time) {
        return EMPTY;
      }

      return of(time);
    })
  );


atTimes([[11,48]]).subscribe(x => console.log(x));

Демонстрация в реальном времени: https://stackblitz.com/edit/rxjs-sxxe41

PS: я предположил, что обновление не нужно запускать, как только начинается новая минута. Если это так, то таймер должен отмечаться каждую секунду, и вы должны использовать отдельныйUntilChanged для текущего часа / минут, чтобы дождаться, пока они не станут разными.

0 голосов
/ 23 января 2020

Вы должны взглянуть на asyncScheduler из Rx JS, который использует setInterval для операций, основанных на времени.

Ссылка на эту ссылку: https://rxjs-dev.firebaseapp.com/guide/scheduler

В идеале cron-задания На стороне сервера лучше всего справляться с функциями, выполняемыми в разное время, возможно, стоит обратить внимание и на это.

...