Rx java Rx超时运算符

Rx java Rx超时运算符,rx-java,rx-android,Rx Java,Rx Android,如果没有发射任何项目,我想在x秒后发射一个项目。我试图使用超时操作符。问题是,timeout操作符要求至少在开始倒计时之前执行一项。从文件中: 如果下一项没有在从其前一项开始的指定超时持续时间内发出,则生成的可观察项将开始镜像回退可观察项 这不是我想要的行为。当我订阅我的observable时,如果一段特定的时间过去了,之前没有任何已发出的项目,我希望发出一个特定的项目 例如: getUserLocationFromGPS() //Sometimes I dont receive user l

如果没有发射任何项目,我想在x秒后发射一个项目。我试图使用超时操作符。问题是,timeout操作符要求至少在开始倒计时之前执行一项。从文件中:

如果下一项没有在从其前一项开始的指定超时持续时间内发出,则生成的可观察项将开始镜像回退可观察项

这不是我想要的行为。当我订阅我的observable时,如果一段特定的时间过去了,之前没有任何已发出的项目,我希望发出一个特定的项目

例如:

 getUserLocationFromGPS() //Sometimes I dont receive user location
.timeout(5, TimeUnit.SECONDS, Observable.just(getDefaultLocation())
.subscribe(...);
  • 如果
    yourApi.getData()
    没有发出任何信息,那么您将从回退观察对象接收数据

  • 如果
    yourApi.getData()
    超时,那么您将从回退观察对象接收数据

  • 如果
    yourApi.getData()
    正常发射,那么您将从中接收数据


  • 我没有专门使用java rx,但有一个想法:

    getUserLocationFromGPS()
    .buffer(5 sec, 1 item) //not sure how to do this in rx-java
    .map(x => { // this is select in .net
        if(x.IsEmpty)
          return getDefautLocation();
        else
          return x[0];
        }).Subscribe(...)
    
    每5秒会给你一份物品清单。您可以指定它在getUserLocationFromGPS()仅发送1项后返回


    将检查列表是否为空(未发出任何项)并返回正确的值

    Hi,我已经在使用该参数。Mi的问题并不是这样。您总是发出一个项目,“你好”。在我的情况下,我以前可能没有发出任何项目,因此超时运算符不会开始倒计时。@VictorManuelPinedaMurcia为了清楚起见,您能将答案标记为已接受吗?很乐意帮忙!也许从getDefaultLocation()开始?@KrzysztofSkowronek我不想首先发出默认位置,这只是一个备用情况。恐怕对我不起作用。如果getUserLocationFromGPS()不发出项目,缓冲区在5秒后不会发出空列表。在这种情况下不执行Map操作符。我将坚持本杰明的解决方案。非常感谢!
    getUserLocationFromGPS()
    .buffer(5 sec, 1 item) //not sure how to do this in rx-java
    .map(x => { // this is select in .net
        if(x.IsEmpty)
          return getDefautLocation();
        else
          return x[0];
        }).Subscribe(...)