4

我创建了一个返回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()函数中调用了所有内容,但我错过了什么?

4

1 回答 1

9

observable用于从头开始创建 Observable 但您已经拥有Observable<String>fromtoObservable()所以不需要它。下面的代码对我有用:

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)

但是这个嵌套的 Observable 版本让我感到困惑。

于 2016-03-05T22:27:32.643 回答