2017-12-15 24 views
0

개체를 만드는 값 비싼 계산이 있다고 가정 해보십시오. 발신자에게 어디에서 그런 유연성이 있는지 알려주고 싶습니다. subscribeOn(). 그러나 부작용 (예 : 개체가 일부 외부 데이터 저장소에 의해 뒷받침 됨) 때문에 계산을 두 번 이상하고 싶지 않습니다.싱글에서 방출 한 값을 어떻게 메모합니까?

나는

MyObject myObject = MyObject.createExpensively(params); 
return Single.just(myObject); 

을 쓸 수 있지만,이 호출 스레드에서 고가의 작업을 수행합니다.

나는

Callable<MyObject> callable =() -> MyObject.createExpensively(params); 
return Single.fromCallable(callable); 

을 쓸 수 있지만, 이것은 다수의 가입자가있는 경우 내가 원하는하지 않은, 가입 당 일단 createExpensively() (부작용) 호출합니다.

createExpensively()이 한 번만 호출되고 부작용이 한 번만 발생하도록하려면 여기에서 찾고있는 패턴은 무엇입니까?

+0

[Single.cache()] (http://reactivex.io/RxJava/2.x/javadoc/io/reactivex/Single.html#cache--)에서 보았습니까? – akarnokd

+0

싱글 톤 패턴? – tolpp

+0

@akarnokd 어떻게 작동합니까 - Single.fromCallable (c) .cache()? 그렇다면 답을하면 받아 들일 것입니다. –

답변

1

당신은 Single.cache()을 사용할 수

Single.fromCallable(() -> MyObject.createExpensively(params)).cache(); 
1
Single.fromCallable(() -> MyObject.createExpensively(params)).cache(); 

캐시() -> 늦게 SingleObservers 현재 단일 및 리플레이를에서 성공 값 또는 예외를 저장합니다. 자세한 내용은 here을 보시기 바랍니다.

+0

설명을 추가하여 문제를 해결하는 방법을 입력하십시오. – Vagish