【问题标题】:How to emit event manually to interval?如何手动发出事件到间隔?
【发布时间】:2021-05-02 12:58:19
【问题描述】:

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

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

但是reload 没有next 功能。那么有没有办法呢?

codesandbox.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');
});

【问题讨论】:

    标签: javascript typescript rxjs


    【解决方案1】:

    您可以再创建一个可观察的 myEvent$ 并在您想使用它时触发您的事件。然后将reload$myEvent$ 合并并订阅生成的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$ 何时触发,并且同一观察者可以订阅这两个发射。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-10-03
      • 2021-09-16
      • 2017-12-10
      相关资源
      最近更新 更多