如何有条件地回滚/重放某些操作?

时间:2017-07-20 07:13:04

标签: javascript rxjs reactive-programming rxjs5

我希望获得一个发出数字的流,每个数字与前一个数字或之前的所有数字都不同。

输出下面的流可能是[0,1,1,1,2,1,0,...],我希望得到一些修改来获得[0,2,1,2,0,1,... 。],序列中没有两个或多个相邻的数字相同:

const number$ = Rx.Observable.interval(500)
  .map(() => Math.floor(Math.random() * 5))
  .take(5)

number$.subscribe(console.log)

输出下面的流可能是[3,3,1,4,3],我期望得到[2,0,3,1,4]的一些修改,所有数字都是不同的:

distinct

简单地使用distinctUntilChangeddistinct会产生一些'漏洞',这是不可取的。预生成确定的序列(例如:使用lodash.shuffle)也不是理想的解决方案,输出数可能是由远程rand生成器服务生成的,意味着我们在获取重复数字的同时进行云重试数提取。

我认为如果有一些方法可以获得distinctUntilChangedrequestAnimationFrame()的比较结果并使用它来有条件地回滚/重放最后一个(一个或一些)操作可以解决我的问题

0 个答案:

没有答案