Javascript RxJs事件重复链

Javascript RxJs事件重复链,javascript,angular,rxjs,Javascript,Angular,Rxjs,我观察到一些冷RXJ,当某个事件单击$emission时,我想刷新并再次从服务器获取数据 let files$ = param$.pipe( param => http.getFolder(param), folder => http.getFolderFiles(folder), REPEAT_ON(click$) takeUntil(this.destroy$) ) 我应该使用什么运算符来代替想象中的重复运算符 我可以用这段代码实现这一点 let files$

我观察到一些冷RXJ,当某个事件单击$emission时,我想刷新并再次从服务器获取数据

let files$ = param$.pipe(
  param => http.getFolder(param),
  folder => http.getFolderFiles(folder),
  REPEAT_ON(click$)
  takeUntil(this.destroy$)
)
我应该使用什么运算符来代替想象中的重复运算符

我可以用这段代码实现这一点

let files$ = combineLatest(param$, click$.pipe(startsWith(undefined))).pipe(
  param => http.getFolder(param[0]),
  folder => http.getFolderFiles(folder),
  takeUntil(this.destroy$)
)
但是它闻起来很难闻,我认为CombineTest不适合我的用例。

为什么不呢

click$.pipe(
  switchMap(() => files$)
).subscribe(res => { /* result of the chain ran again */ })

combinelatetest
没有问题,但我认为您试图找到的是
repeatWhen
运算符

const array$ = Observable.from(["arr1", "arr2", "arr3", "arr4"]).do(console.log);
const click$ = Observable.fromEvent(document, 'click');

array$
    .repeatWhen(() => click$)
    .subscribe();

下面是一个示例:

,因为它在第一次单击之前不会获取数据。(单击应仅刷新它,而不是启动它)。您可以使用startWith()进一步扩展您的解决方案,但它似乎过于工程化了是的,但这不是这段代码的错误,这是您的设计的错误:
文件$
无法获取数据,因为您是这样编码的。不,问题是您的解决方案是必需的,而不是功能性的。最后一个是RXJS的首选。请告诉我更多关于当是功能性的而不是强制性的时如何使用
repeat的信息。不管怎么说,看到这些随机的理由,我再也没有时间去无谓的争论了:很高兴你解决了你的问题,回头见!问题是CombineTest需要startWith()才能真正工作。因此,当重复变得更短时,例如链接具有无限的页面重新加载循环