RxJS观察数组并在更改时中止请求

时间:2019-04-22 12:37:45

标签: javascript rxjs fetch-api

我有一个数组,该数组根据用户输入而变化。例如。用户单击选择按钮,发生这种情况时,我将重写数组。数组满足要求后,我就开始执行提取请求,但是我想减少请求量,因为当用户实际上停止选择字段时,用户可能会快速选择许多字段,并且只需要一个请求。因此,我正在使用switchMap,但无法正常工作。

const source$ = from(selected);
source$.pipe(
  debounceTime(1000),
  switchMap(() => {
    if(selected.length > 1) {
      const formatted = selected.map(s => s.id);
      fetch(`${url}/getParams`, {
        method: 'POST',
        body: JSON.stringify({ formatted })
      }).then(response => toCompare(response.json()));
    }
  })
);

请注意,选择的是我的数组,我没有执行push / pop,但我完全重写了数组,但使用了React Hooks中的useState。

1 个答案:

答案 0 :(得分:0)

默认情况下,Rx.js直到至少有一个侦听器才运行流。

要添加侦听器,所有流上都有subscribe方法

const source$ = from(selected);
source$.pipe(
  debounceTime(1000),
)
.subscribe(() => {
  if(selected.length > 1) {
    const formatted = selected.map(s => s.id);
    fetch(`${url}/getParams`, {
      method: 'POST',
      body: JSON.stringify({ formatted })
    }).then(response => toCompare(response.json()));
  }
});