Aun*_*win 10 android kotlin android-livedata kotlin-coroutines
让我从示例代码片段开始
suspend fun executeLive(result: MutableLiveData<Person>) {
val response = ... //suspend api request
mediatorLiveData.removeSource(response)
mediatorLiveData.addSource(response) {
result.value = sortData(it) // sortData is also suspend function which sortData at Dispatcher.Default
}
}
Run Code Online (Sandbox Code Playgroud)
在这个例子中,sortData
不能调用lambda function
(在这种情况下addSource
)。而且我已经声明executeLive
为suspend
,这就是为什么suspend
api 请求可以首先启动。但是sortData
函数显示编译时错误
挂起函数只能从协程主体调用
那么我该如何改变我的代码结构来解决这个问题呢?
更新:有没有关于这个的文章?
小智 4
lambda 通常是一个回调函数。回调函数之所以被称为回调函数,是因为我们将一段代码包装在一个函数中,并将其传递给其他人(或其他地方)来执行。这是一种基本的控制反转,其中代码不是由您执行,而是由其他人执行(例如框架)。
例如,当您onClickListener
在按钮上设置 a 时,我们不知道它何时会被调用,我们为框架传递一个 lambda,该框架负责处理用户交互以调用指定的操作。
在您的情况下,类似地,挂起函数不会调用sortdata
,而是将其传递给mediatorLiveData
对象以在其自己的上下文中调用它。您传递的 lambda 没有必要从协程主体中调用,因此这是不允许的。
归档时间: |
|
查看次数: |
1709 次 |
最近记录: |