RxJava:正确地从Observable返回随机对象

时间:2016-12-13 19:38:02

标签: java rx-java

我的任务是在Producer中生成给定数量的随机对象(形状 - 圆形或正方形),将它们打印到控制台,然后在Consumer中使用它们。为了生成随机对象,我在抽象类getShape中使用方法Shape然后,在创建Observable时,我使用defer()来获取每个新对象。

对于打印对象,我尝试使用doOnNext

Observable<Shape> produceShapes(int amount) {
        System.out.println("Produced following shapes:");
        return Observable.defer(() -> Observable.just(Shape.getShape()))
                .doOnNext(System.out::print)
                .repeat(amount);
    }

消费者方法通常是Observable.just(new Producer().produceShapes(10))...

问题是defer()工作两次 - 在打印形状时和消费者请求它们时,消费者会变成不同的形状。

编辑:我尝试删除.doOnNext(System.out::print)并在getShape()方法中打印对象,然后再将其提供给制作人,但消费者仍然会变成不同的形状。

怎么解决?如何创建形状,打印它们并为消费者提供相同的形状?

1 个答案:

答案 0 :(得分:2)

我不明白,为什么要使用延迟。延迟运算符为每个订阅者创建新的可观察对象。如果您只想要金额 - 多个形状,请尝试以下方法:

//page2.ts
import { Storage } from '@ionic/storage';

export class LoginPage {
   ...

  //this works fine
  onLogin(){
    this.storage.set('uid', '12345');
  }

}

//page2.ts

export class Foo {

   //no value gets retrieved here
  onSave() {
    this.storage.get('uid')
    .then(uid =>  console.log(uid));
  }
}