gpt4 book ai didi

android - 为什么我无法在 lambda 函数下调用 kotlin 挂起函数

转载 作者:行者123 更新时间:2023-12-02 12:54:36 27 4
gpt4 key购买 nike

让我从示例代码 fragment 开始

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
}

}

在此示例中,sortData 无法在 lambda 函数下调用(在本例中为 addSource)。而且我已经声明了 executeLive as 挂起,这就是为什么挂起 api请求可以首先启动。但是 sortData 函数显示编译时错误

Suspend function can only be called from a coroutine body

那么我该如何改变代码结构来解决这个问题呢?

更新:有关于此的文章吗?

最佳答案

lambda 通常是一个回调函数。回调函数之所以被称为回调函数,是因为我们将一段代码包装在一个函数中,并将其传递给其他人(或其他地方)来执行。这是一种基本的控制反转,其中代码不是由您执行,而是由其他人执行(例如框架)。

例如,当您在按钮上设置 onClickListener 时,我们不知道它何时会被调用,我们为框架传递一个 lambda,该框架负责处理用户交互以调用指定的行动。

在您的情况下,类似地,挂起函数不会调用 sortdata,而是将其传递给 mediatorLiveData 对象以在其自己的上下文中调用它。您传递的 lambda 没有必要从协程主体中调用,因此这是不允许的。

关于android - 为什么我无法在 lambda 函数下调用 kotlin 挂起函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59836785/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com