简体   繁体   English

如何在暂停的协程流中使用回调?

[英]How to use callback from within a suspended coroutine flow?

I am using coroutines flow and I need to call a suspended emit from within a non-suspended callback.我正在使用协程流程,我需要从非暂停回调中调用暂停的发射。 I don't have control over the callback and can't make that interface method suspended.我无法控制回调,也无法暂停该接口方法。 Is it possible to do this?是否有可能做到这一点?

import kotlinx.coroutines.flow.flow

fun foo() = flow {
    someLibraryObject.listenToSomeEvent(object: SomeCallback {
        override fun bar() {
            emit("Some result")
        }
    }
}

interface SomeCallback {
   fun bar()
}

callbackFlow can be used in this case.在这种情况下可以使用callbackFlow Note that it's currently experimental.请注意,它目前是实验性的。

fun foo() = callbackFlow {
    someLibraryObject.listenToSomeEvent(object: SomeCallback {
        override fun bar() {
             offer("Some result")
        }
    }
}

For further details you can refer to this有关更多详细信息,您可以参考

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM