2017-01-04 8 views
1

Я ожидал, что flatMapCompletable вызовет данное действие, когда Completable завершится нормально. Однако это не работает, как я думал. Вот простой пример:flatMapCompletable не вызывает данное действие

PublishProcessor<String> processor = PublishProcessor.create(); 

    processor.flatMapCompletable(s2 -> { 
     System.out.println("s2 " + s2); 
     return Completable.complete(); 
    }).subscribe(() -> { 
     System.out.println("done"); // it does not come here 
    }); 

Ожидаемое поведение? Если да, как проверить, завершена ли задача «Завершить»? Completable.complete().doFinally()?

ответ

3

Для того, чтобы активировать действие onComplete, необходимо позвонить по телефону processor.onComplete();. Это связано с тем, что вы все еще подписываетесь на предмет, пока он прослушивает входящие события.

Flowable завершается нормально

Flowable.just(1).flatMapCompletable(s2 -> { 
     System.out.println("s2 " + s2); 
     return Completable.complete(); 
    }).subscribe(() -> { 
     System.out.println("done"); // it does come here 
    }); 
+0

Благодарим за отзыв. Я понял. Если я хочу использовать PublishProcessor, возможно, это будет так? 'processor.flatMapCompletable (s1 -> { System.out.println ("S1" + s1); возвращение Completable.complete() .doOnComplete (() -> processor.onComplete());} ) .subscribe (() -> System.out.println ("done") ); – tomoima525

2

Как отметил Александр, почему вы не получите что-либо PublishProcessor никогда не завершается.

JavaDoc из flatmapCompletable Примечания как указано ниже.

Отображает каждый элемент восходящего канала Observable в CompletableSources, подписывается на них и ожидает завершения восходящего и всех заполненных источников.

Для того,

Спасибо.

 Смежные вопросы

  • Нет связанных вопросов^_^