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()
函数中的所有内容都被调用,但是我错过了什么?
observable
是从头开始创建一个Observable,但是你已经有了toObservable()
Observable<String>
,所以你不需要它。 下面的代码适用于我:
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版本让我感到困惑。