如何从其他过程中取消可观察对象

时间:2020-06-18 11:26:26

标签: rxjs

假设您在一个流程中运行一个批处理作业。您正在使用可观察对象作为实现。

现在,您要向客户端引入API。这样,用户便可以取消/停止正在运行的批处理作业。该API请求将在您的网络服务器处理的另一个进程中。

我正在考虑在数据库中设置一个API可以设置的标志,然后批处理作业过程可以读取以传达取消信号。批处理作业过程是否可以定期检查是否设置了该信号?

  const ob = from([1,2,3]);
  ob.pipe(mergeMap(i => {
    // do something
    return of(i);
  }, undefined, 1);

也许mergeMap的第二个参数可以做到吗?

1 个答案:

答案 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();