RxJS可观察项:新请求取决于以前的结果

RxJS可观察项:新请求取决于以前的结果,rxjs,observable,Rxjs,Observable,如何根据接收到的值为可观察对象或主体生成新值 例如: 假设我有一个可观测的,由于web API,它发出一个随机数 如果它是一个偶数,我希望可观察到的发射另一个随机数,使用第一个作为种子。。。依此类推,直到我得到一个奇数 请注意,我事先不知道我将提出多少请求 到目前为止,我一直试图用“奇怪的”递归方法来实现这一点,但我觉得必须有一种非常合适的方法来实现这一点。似乎可以使用expand()来实现这一点 const source$ = /* some API call that returns an

如何根据接收到的值为可观察对象或主体生成新值

例如:

假设我有一个可观测的,由于web API,它发出一个随机数

如果它是一个偶数,我希望可观察到的发射另一个随机数,使用第一个作为种子。。。依此类推,直到我得到一个奇数

请注意,我事先不知道我将提出多少请求


到目前为止,我一直试图用“奇怪的”递归方法来实现这一点,但我觉得必须有一种非常合适的方法来实现这一点。

似乎可以使用
expand()
来实现这一点

const source$ = /* some API call that returns an Observable */;

source$.pipe(
  expand((previous: number) => previous % 2 === 0 ? source$ : EMPTY),
  takeLast(1),
).subscribe(console.log);
这只提供最后一个值(第一个奇数)。如果您还想获得所有中间值,只需删除
takeLast(1)


现场演示:

所以,如果是偶数,您希望使用该数字作为参数调用web api,或者“种子”是什么意思?。如果是,您的初始“种子”值是多少?是的,前面的数字应该是web API的参数。我的观点是,我必须使用前面的值来修改Observable发送的请求,而不仅仅是重复相同的请求。谢谢您有趣的回答。我为您的演示提供了分支,以便将之前的值用作“种子”: