我的任务是在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()
方法中打印对象,然后再将其提供给制作人,但消费者仍然会变成不同的形状。
怎么解决?如何创建形状,打印它们并为消费者提供相同的形状?
答案 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));
}
}