假设您在一个流程中运行一个批处理作业。您正在使用可观察对象作为实现。
现在,您要向客户端引入API。这样,用户便可以取消/停止正在运行的批处理作业。该API请求将在您的网络服务器处理的另一个进程中。
我正在考虑在数据库中设置一个API可以设置的标志,然后批处理作业过程可以读取以传达取消信号。批处理作业过程是否可以定期检查是否设置了该信号?
const ob = from([1,2,3]);
ob.pipe(mergeMap(i => {
// do something
return of(i);
}, undefined, 1);
也许mergeMap的第二个参数可以做到吗?
答案 0 :(得分:0)
使用RxJS做到这一点的一种方法是创建一个负责取消批处理作业的主题。
const cancelBatchJob$ = new Subject();
const ob$ = from([1,2,3]);
ob$.pipe(
mergeMap(i => doBatchJobWith(i)),
takeUntil(cancelBatchJob$)
).subscribe(
results => console.log(results.complete)
);
现在,如果要取消批处理作业,只需将其发送到cancelBatchJob$
cancelBatchJob$.next();