【发布时间】:2020-06-18 05:38:10
【问题描述】:
使用下面的代码,我收到以下错误:“暂停函数 'getSomethingFromAPI' 应该只从协程或另一个暂停函数中调用。”,这是当前的。 getSomethingFromAPI 确实是 ViewModel 的挂起函数。
override fun onActivityCreated(savedInstanceState: Bundle?) {
super.onActivityCreated(savedInstanceState)
viewModel = ViewModelProvider(this).get(CallVM::class.java)
viewModel.applyLaunch {
this.getSomethingFromAPI()
}
}
fun <T: ViewModel> T.applyLaunch(block: T.() -> Unit)
= apply { viewModelScope.launch(Dispatchers.IO) { block() } }
正如您所看到的,在 applelaunch 函数中,我正在协程(启动)内执行 getSomethingFromAPI,但此信息丢失了。有什么办法可以同时保留 T 作为 ViewModel 吗?
更具体地说,是否可以有一个快捷函数来实现以下代码的前两行?
viewModel.apply {
viewModelScope.launch(Dispatchers.IO) {
getSomethingFromAPI()
}
上面的getSomethingFromAPI 可以同时看到“this”(ViewModel 和协程)。
我知道拥有它并不重要,但知道它对于创建 DSL 可能是件好事。
【问题讨论】: