rx kotlin подписка не работает, не получает предметы

Я создал функцию, которая возвращает Observable<String> с именами файлов, но я не получаю никакого события в моей подписке, где я вызываю этот метод. Также нет вызова onError или onComplete
Смотрите мой код:

fun getAllFiles(): Observable<String> {

    val allFiles = File("/Users/stephan/Projects/Playground/kotlinfiles/")
            .listFiles { file -> !file.isDirectory() }
    return observable { subscriber ->
        allFiles.toObservable()
                .map { f -> "${f.name}" }
                .doOnNext { println("Found file $it") }
                .subscribe { subscriber}
    }
}

fun test() {
    getAllFiles()
            .doOnNext { println("File name$it") }
            .subscribe(
                    {n -> println("File: $n")},
                    {e -> println("Damn: $e")},
                    {println("Completed")})
}

Хотя все зовется в getAllFiles() функция, так что мне не хватает?

1 ответ

Решение

observable для создания Observable с нуля, но у вас уже есть Observable<String> от toObservable() так что тебе это не нужно. Код ниже работает для меня:

fun getAllFiles(): Observable<String> {
  val allFiles = File("/Users/stephan/Projects/Playground/kotlinfiles/")
    .listFiles { file -> !file.isDirectory }
  return allFiles.toObservable()
    .map { f -> "${f.name}" }
}

fun test() {
  getAllFiles()
    .doOnNext { println("File name $it") }
    .subscribe(
        { n -> println("File: $n") },
        { e -> println("Damn: $e") },
        { println("Completed") })
}

Вы также можете исправить это, изменив с:

.subscribe{subscriber}

в

.subscribe(subscriber)

но эта вложенная Наблюдаемая версия сбивает меня с толку.

Другие вопросы по тегам