首页 > 解决方案 > 如何手动发出事件到间隔?

问题描述

我有一个来自 rxjs 的间隔计时器,withLatestFrom我用它连接其他可观察对象,以便在我的逻辑中使用它们。

而且我想手动触发事件而不等待下一个间隔发生。

但是reload没有next功能。那么有没有办法做到这一点?

码沙盒.io

import { interval } from "rxjs";
import { tap, withLatestFrom } from "rxjs/operators";

console.clear();

const reload = interval(20 * 1000).pipe(
  /* withLatestFrom(someObs, ),*/
  tap(() => {
    console.log("do something");
  })
);

reload.subscribe(r => {

  console.log('nothing to do here');
});

标签: javascripttypescriptrxjs

解决方案


您可以创建一个更可观察的说法myEvent$,并在您想使用它时触发您的事件。然后合并reload$withmyEvent$并订阅结果 observable。

import { Observable } from "rxjs";
import { tap, take, mergeWith } from "rxjs/operators";

const reload$ = interval(20 * 1000).pipe(
  /* withLatestFrom(someObs, ),*/
  tap(() => {
    console.log("do something");
  })
);

const myEvent$ = new Observable(sub => {
  sub.next("My new event");

  setTimeout(() => {
    sub.next("My another event after 3 seconds");
    sub.complete();
  }, 3000);
});

reload$.pipe(mergeWith(myEvent$)).subscribe(r => {
  console.log(r);
});

这样,您将完全控制并且能够在您想要的任何时候触发您的事件,而不管reload$火灾何时以及同一观察者可以订阅这两种排放。


推荐阅读