Javascript 如何在特定时间使用rxjs发出请求?
我需要在某个时间(上午8点、上午12点、下午4点)每天提出三次请求。Javascript 如何在特定时间使用rxjs发出请求?,javascript,angular,rxjs,rxjs6,Javascript,Angular,Rxjs,Rxjs6,我需要在某个时间(上午8点、上午12点、下午4点)每天提出三次请求。 实现这一点的最佳方法是什么?您应该研究RxJS中的asyncScheduler,它使用setInterval进行基于时间的操作 请参阅此链接: 理想情况下,cron作业最好是在服务器端处理需要在不同时间执行的功能,这可能也值得一看。这感觉有点像是对JS任务的奇怪要求,我认为您应该考虑为此创建cron任务。但为了举例说明,以下是您如何做到这一点: import { of, Observable, timer, EMPTY } f
实现这一点的最佳方法是什么?您应该研究RxJS中的asyncScheduler,它使用setInterval进行基于时间的操作 请参阅此链接:
理想情况下,cron作业最好是在服务器端处理需要在不同时间执行的功能,这可能也值得一看。这感觉有点像是对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));
从“rxjs”导入{of,Observable,timer,EMPTY};
从“rxjs/operators”导入{map,filter,timestamp,switchMap};
类型小时=数量;
类型分钟=数字;
常数时间=(时间:[小时,分钟][]):可观察=>
计时器(0,1000*60)。管道(
开关映射(()=>{
持续日期:日期=新日期();
常数[当前小时,当前分钟]=[
date.getHours(),
date.getMinutes()
];
const time=times.find(
([hour,minutes])=>hour===currentHour&&minutes===currentMinutes
);
如果(!时间){
返回空;
}
返回(时间);
})
);
atTimes([[11,48]]).subscribe(x=>console.log(x));
现场演示:
PS:我假设更新不需要在新的一分钟开始时立即触发。如果是这种情况,那么计时器应该每秒滴答响一次,并且您应该在当前的小时/分钟上使用distinctUntilChanged来等待它们的差异