Javascript 如果在给定的时间范围内未发出任何值,则rxjs将发出常量值

Javascript 如果在给定的时间范围内未发出任何值,则rxjs将发出常量值,javascript,rxjs,Javascript,Rxjs,我有一个可观测的周期性发射a值(它发射阵列) 如何使其在2秒钟内没有值时发出一个常量值(例如空数组)?这取决于如何获取这些数组。但您始终可以使用setInterval更新observable,使其自上次发射后每2秒发射一次。这将确保每条消息的最大窗口时间为2秒(但可能要小得多) 例如: const observable=新的observable(函数订阅(订户)){ var区间; 函数resetInterval(){ 间隔时间; 间隔=设置间隔(()=>subscriber.next([]),2

我有一个可观测的周期性发射a值(它发射阵列)


如何使其在2秒钟内没有值时发出一个常量值(例如空数组)?

这取决于如何获取这些数组。但您始终可以使用
setInterval
更新observable,使其自上次发射后每2秒发射一次。这将确保每条消息的最大窗口时间为2秒(但可能要小得多)

例如:

const observable=新的observable(函数订阅(订户)){
var区间;
函数resetInterval(){
间隔时间;
间隔=设置间隔(()=>subscriber.next([]),2_000);
}
重置间隔();
const subject=webSocket(“ws://localhost:8081”);
subject.subscribe(
msg=>{subscriber.next(msg);resetInterval();}
err=>subscriber.error
()=>console.log('complete')//在连接关闭时调用(无论出于何种原因)。
);
});

实现这一点的一种方法是使用创建一个可观测对象,该对象发射两个项目:

  • 原值
  • 在延迟2000毫秒后,返回空阵列
  • 如果
    switchMap
    接收到来自源的另一个发射,它将创建一个新的内部可观测,而不会发射空阵列

    const obs$ = source$.pipe(
        switchMap(source => 
          concat(
            of(source), 
            of([]).pipe(delay(2000))
          )
        )
    );
    
    这是一个样品