如何从挂起方法调用 Observable 并等待结果

Sub*_*ure 2 kotlin-coroutines

我在服务中定义了以下方法

fun uploadFile(
        fileName: String,
): Observable<Status> {
    return Observable.fromCallable {
        fileUploadService.uploadFile(
               fileName
        )
    }
    .subscribeOn(schedulerProvider.ioScheduler)
}
Run Code Online (Sandbox Code Playgroud)

我想要做的是从挂起方法调用此方法,从挂起方法调用 Observable 并等待 Observable 结果的最佳方法是什么。

vieweModelScope.launch {
   coroutineScope {
        val deferredResults = async { uploadFileHelper(fileName) }
        val status = deferredResults.await()
   }
}

fun uploadFileHelper (fileName: String): Message {
        return uploadService.uploadFile(
                request = request,
            ).toBlocking().first()
}
Run Code Online (Sandbox Code Playgroud)

我知道,我可以重构上述服务以取出“fileUploadService.uploadFile”来方法并直接调用它。但我正在尝试构建 RxJava Observable+Coroutine 共存的原型。

Pet*_*Học 5

使用kotlinx.coroutines.rx3suspend fun <T> ObservableSource<T>.awaitFirst(): T的扩展(或, , , )awaitFirstOrDefaultawaitFirstOrElseawaitFirstOrNullawaitSingle

viewModelScope.launch {
  val status = uploadService.uploadFile(request).awaitFirst()
}
Run Code Online (Sandbox Code Playgroud)