【问题标题】:Rx: get first item, but throw exception when the second item arrivesRx:获取第一个项目,但是当第二个项目到达时抛出异常
【发布时间】:2017-07-28 12:51:50
【问题描述】:

使用 Rx 的 observable 流,有没有一种有效的方法来获取第一项,完成源 observable,但是如果第二项到达则抛出异常? 听起来不太适合使用 Rx,但是有没有巧妙的方法来处理它?

【问题讨论】:

  • 不,没有好的方法可以做到这一点。你不能在一个值之后完成源 observable,然后期望另一个值来。如果你完成了 observable,那就是它——它已经完成了。
  • 我也很怀疑。不符合图案。但是,我正在考虑一种模式,您可以在其中获取第一个项目并存储在某个地方,然后等待超时,然后再决定如果第二个项目到那时没有到达,则决定发出第一个项目。我只是看到太多情况,您在决定之前要提取数据库调用的整个结果集。这种模式不适用于热的可观察对象,但有点冷的对象,例如数据库游标。
  • 这应该很容易锻炼。
  • 这越来越接近var query = source.Publish(ss => ss.Take(1).Concat(Observable.Amb(Observable.Timer(TimeSpan.FromSeconds(1.0)).Select(x => -1), ss.Take(1).Concat(Observable.Throw<int>(new Exception())))));

标签: system.reactive rx-py


【解决方案1】:

据我了解,这违反了IObservable 合同,该合同明确规定在errorcomplete 之后不应有额外的物品到达。所以基本上,您正在检查不能(或不应该)出现的情况。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-09-25
    • 2012-09-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多