Rxjs 如何立即触发某个事件,然后消除其影响

Rxjs 如何立即触发某个事件,然后消除其影响,rxjs,redux-observable,Rxjs,Redux Observable,我有一个可观察的绑定到输入框上的事件键控 对于每个按下的键。我想要console.log“现在做点什么” 如果5秒钟内没有按下任何键,则我希望console.log“执行其他操作” import { fromEvent } from 'rxjs'; import { debounceTime, map, switchMap } from 'rxjs/operators'; const searchBox = document.getElementById('search'); const k

我有一个可观察的绑定到输入框上的事件键控

对于每个按下的键。我想要console.log“现在做点什么”

如果5秒钟内没有按下任何键,则我希望console.log“执行其他操作”

import { fromEvent } from 'rxjs';
import { debounceTime, map, switchMap } from 'rxjs/operators';

const searchBox = document.getElementById('search');

const keyup$ = fromEvent(searchBox, 'keyup')

keyup$.pipe(
  switchMap((i: any) => 'doSomethingNow'), // I use switchMap here because 'doSomethingNow' is an http request in my real code so that on each key pressed, it cancels the previous http request if it was not finished and start the new http request
  debounceTime(2000),
  map(_ => 'do something else')
)
.subscribe(console.log);

此代码仅在5秒钟后打印“去盎司后做点什么”,但在每次按键后从不打印“domethingNow”

您是否尝试过类似的操作:

import { fromEvent } from 'rxjs';
import { debounceTime, map, switchMap } from 'rxjs/operators';

var searchBox  = document.getElementById('search');

var keyup$ = fromEvent(searchBox , 'keyup')      

keyup$.pipe(
  switchMap((i: any) => { console.log('do something');})
  debounceTime(5000)) // with delay of 5 secs
  .subscribe(console.log('do something else'););

可以使用“合并”操作符:

const searchBox = document.getElementById('search');

const keyup$ = fromEvent(searchBox, 'keyup');

const keyupEnd$ = keyup$.pipe(
  switchMap(() => debounceTime(500))
);

const result = merge(
  keyup$,
  keyupEnd$
);

所以你想在每按一个键时发送http请求?这就是如果你在每次按键前输入,有一个http请求,如果没有按键5秒,就会发生的情况。我想console.log‘做点别的’我做不到,我用的是redux observable。