簡體   English   中英

有人能理解 java.lang.IllegalStateException: Only one Observer allowed in this short example 嗎?

[英]Could someone understand the java.lang.IllegalStateException: Only one Observer allowed in this short example?

我意識到 30491785 討論了這一點,但沒有真正解釋為什么會產生錯誤,並且該示例涉及無關代碼。 我想用一個 5 行的例子來問這個問題。

問題是 gwindows 發生了什么而 swindows 沒有發生(除了類型不同的事實),是否有任何解決方法?

public class OneObservableError {

    public static void main(String[] args) throws Exception {
        Observable<Long> source = Observable.interval(1, TimeUnit.SECONDS);
        Observable<Observable<Long>> swindows = source.window(source, s -> Observable.interval(3, TimeUnit.SECONDS));
        Observable<GroupedObservable<Long, Long>> groups = source.groupBy(x -> x % 4);
        Observable<Observable<Observable<Long>>> gwindows
                = groups.map(g -> g.window(g, i -> Observable.interval(3, TimeUnit.SECONDS)));
        //swindows.flatMap(gw->gw).subscribe(System.out::println); //Works
        gwindows.flatMap(gw -> gw).subscribe(System.out::println); //Fails with Only one Observable allowed     
        sleep(10000);
    }

GroupedObservable 是一種單播類型的源,您不能多次使用它。 問題在於您在 g.window(g, ...) 處的代碼,其中窗口運算符嘗試訂閱兩次。 使用 publish(Function) 共享單機使用 g:

g.publish(gs -> gs.window(gs, ...).flatMap(gw -> gw))...

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM