我开始学习 Kotlin Flow 和 Coroutines,但我不知道如何使下面的代码工作。我究竟做错了什么?
interface MessagesListener {
fun onNewMessageReceived(message: String)
}
fun messages(): Flow<String> = flow {
val messagesListener = object : MessagesListener {
override fun onNewMessageReceived(message: String) {
// The line below generates the error 'Suspension functions can be called only within coroutine body'
emit(message)
}
}
val messagesPublisher = MessagesPublisher(messagesListener)
messagesPublisher.connect()
}
最佳答案
我相信你应该可以使用callbackFlow
....就像是:
fun messages(): Flow<String> = callbackFlow {
val messagesListener = object : MessagesListener {
override fun onNewMessageReceived(message: String) {
trySend(message)
}
}
val messagesPublisher = MessagesPublisher(messagesListener)
messagesPublisher.connect()
}
关于android - 如何使用 Kotlin Flow 从异步回调中发出数据?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/64623712/