当前位置: 首页 > 知识库问答 >
问题:

如果在给定时间框架内没有发出值,rxjs会发出常量值

终洛华
2023-03-14

我有一个可以观察到的,它周期性地发出一个值(它发出数组)。

我如何使它,如果有2秒没有值,应该发出一个常量值(例如一个空数组)?

共有2个答案

鲁华皓
2023-03-14

这将取决于如何获得这些数组。但您始终可以使用setinterval将observable更新为自上次发射后每2秒发射一次。这将确保每个消息的最大窗口为2秒(但可以少得多)

例如:

const observable = new Observable(function subscribe(subscriber) {
  var interval;  
  function resetInterval() {
    clearInterval(interval);
    interval = setInterval(() => subscriber.next([]), 2_000);
  }

  resetInterval();

  const subject = webSocket("ws://localhost:8081");

  subject.subscribe(
    msg => { subscriber.next(msg); resetInterval(); }
    err => subscriber.error
    () => console.log('complete') // Called when connection is closed (for whatever reason).
  );
});
皮献
2023-03-14

这样做的一种方法是使用switchmap创建一个发出2个项的可观察的:

  1. 原始值
  2. 延迟2000 ms后的空数组。

如果switchmap从源接收到另一个发射,它将创建一个新的内部可观察数组,而不会发射空数组。

const obs$ = source$.pipe(
    switchMap(source => {
      return concat(
        of(source), 
        of([]).pipe(delay(2000))
      );
    })
);

这是StackBlitz的样本。

 类似资料:
  • 我正在学习Reactor的反应编程,我想实现注册场景,其中一个用户可以有许多帐户分配到相同的配置文件。但是,分配给配置文件的用户名和分配给帐户的电话必须是唯一的。

  • 我注意到,在这个javadoc中,https://docs.oracle.com/javase/7/docs/api/java/lang/Thread.UncaughtExceptionHandler.htmlUncaughtExceptionHandler用于发生异常但未被捕获的情况。但是,那个线程会悄悄地失败吗?我想是的,因为它是异步进行业务的,但我正在调查我们的一个进程的相关问题,我很惊讶现

  • 我真的用这个把我的头撞到墙上了…:-\ 我有一个哑组件,它具有接收数组的: 父组件通过模板绑定和管道将数组传递给子组件: 这样做正确吗? 但是,发出新值时,子组件中不会激发。 我有一个类来维护这个可观察的项目数组。获取新项目时,它会生成一个新数组(不可变),并将其推送到observable。但是,在子组件中未检测到更改。如果我在页面周围单击一点,最终将启动更改检测,它将更新。 关键是:我在Stac

  • 运算符在可观察的末尾发出值(完成时)。 我正在寻找一种在中使用的方法。当外部可观察对象发出值或完成时,我想要无限内部可观察值的。 此图说明了想要的行为:

  • 我有这个代码: 它产生这样的结果: (在新选项卡中打开图像以查看完整尺寸。) 现在,这些值加起来甚至为。即使这个值也比实际值高。

  • 问题内容: 我正在尝试将jQuery集成到我使用Django框架制作的Web应用程序中。但是,我很难打电话给上班族。我的模板文件包含处理ajax调用的html和javascript形式,如下所示: 我应该处理的ajax调用看起来像: 我试图遵循有关跨站点请求伪造保护的官方文档,并且还研究了解决类似问题的一些stackoverflow问题。我已经将包含在我的模板文件中,但是它似乎仍然无法正常工作。我