【问题标题】:Combine 3 single results - one stream合并 3 个单一结果 - 一个流
【发布时间】:2020-10-11 07:52:24
【问题描述】:

我正在尝试异步地逐一计算。

fun method1(): Int{
return 2+2
}

fun method2(value: Int): Int{
return value * 2
}

fun method3(value: Int): Int{
return value * 3
}

现在我希望方法 2 在方法 1 之后工作并从她那里获取结果。方法 3 在方法 2 之后也起作用,并从她那里获取结果。 是否可以使用 rxkotlin 做到这一点并将其整合到一个流中?

【问题讨论】:

    标签: rx-java reactive-programming rx-java2 rx-kotlin


    【解决方案1】:

    如果您想链接该方法调用,您可以如下所示:

       fun chain(): Single<Int> {
            return Single.just(method1())
                    .map { result1 -> method2(result1) }
                    .map { result2 -> method3(result2) }
       }
    

    但是,如果 method1method2method3 中的操作是异步的,我建议将它们包装在 Single 中。

    供参考map vs flatMap 看看:

    https://medium.com/mindorks/rxjava-operator-map-vs-flatmap-427c09678784

    【讨论】:

      【解决方案2】:

      这可以使用flatMap 来完成,如下所示:

      fun performAsyncCalculation(): Observable<Int> {
              return method1()
                  .flatMap { result1 -> method2(result1) }
                  .flatMap { result2 -> method3(result2) }
      }
      

      方法在哪里:

      fun method1(): Observable<Int> {
          return Observable.create { emitter ->
              // perform calculation to produce requiredInt1
              emitter.onNext(requiredInt1)
              emitter.onComplete()
      }
      
      fun method2(requiredInt1: Int): Observable<Int> {
          return Observable.create { emitter ->
              // perform calculation to produce requiredInt2
              emitter.onNext(requiredInt2)
              emitter.onComplete()
      }
      
      fun method3(requiredInt2: Int): Observable<Int> {
          return Observable.create { emitter ->
              // perform calculation to produce requiredInt3
              emitter.onNext(requiredInt3)
              emitter.onComplete()
      }
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2017-01-31
        • 2021-11-20
        • 1970-01-01
        • 2021-03-24
        相关资源
        最近更新 更多