【问题标题】:RxJS Observables: new request depending on previous resultRxJS Observables:新请求取决于先前的结果
【发布时间】:2019-01-25 10:38:00
【问题描述】:

如何根据接收到的值为 Observable 或 Subject 生成新值?

例子:

假设我有一个 Observable,它通过 Web API 发出一个随机数。

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

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

直到现在,我还是设法用“奇怪”的递归方法来做到这一点,但我觉得必须有一个非常合适的方法来做到这一点。

【问题讨论】:

  • 因此,如果它是偶数,您想以该数字作为参数调用 web api,或者“种子”是什么意思?如果是这样,您的初始“种子”价值是多少?
  • 是的,前面的数字应该是 Web API 的参数。我的观点是我必须使用之前的值来修改 Observable 发送的请求,而不仅仅是重复相同的请求。

标签: rxjs observable


【解决方案1】:

看来您可以为此使用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)

现场演示:https://stackblitz.com/edit/rxjs-czomtm

【讨论】:

猜你喜欢
  • 1970-01-01
  • 2019-05-04
  • 1970-01-01
  • 2017-11-05
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-05-29
  • 1970-01-01
相关资源
最近更新 更多