rx kotlin订阅不起作用,没有收到项目

时间:2016-03-05 19:00:58

标签: kotlin 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 个答案:

答案 0 :(得分:9)

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)

但是这个嵌套的Observable版本对我来说很困惑。