我使用lambda处理来自异步调用的回调。我想在调用方法之外定义回调,以避免使用笨重的方法,但是我似乎无法在lambda中使用早期返回,这使代码不必要地难以阅读。
我尝试将lambda定义为变量,但是在lambda内部返回不可行。
我尝试在函数内定义lambda并返回,但是返回在那也不可行。
例如:
private fun onDataUpdated(): (Resource<List<Int>>) -> Unit = {
if (it.data.isNullOrEmpty()) {
// Handle no data callback and return early.
return@onDataUpdated // This is not allowed
}
// Handle the data update
}
}
我也尝试过:
private val onDataUpdated: (Resource<List<Int>>) -> Unit = {
if (it.data.isNullOrEmpty()) {
// Handle no data callback and return early.
return // This is not allowed
}
// Handle the data update
}
}
我想执行早期返回,而不是使用else情况,以避免不必要的缩进,但是我似乎找不到在lambda中使用返回的方法。
答案 0 :(得分:1)
您可以通过标记lambda来实现。例如,如果您用dataUpdated
标记:
private val onDataUpdated: (Resource<List<Int>>) -> Unit = dataUpdated@ {
if (it.data.isNullOrEmpty()) {
// Handle no data callback and return early.
return@dataUpdated
}
// Handle the data update
}
答案 1 :(得分:0)
通常,您只需将“返回”放在lambda的底部。这是使用Dispatchers.IO的示例:
var res = async(Dispatchers.IO){
var text : String? = null
if(channel==null) {
text = networkRequest(url)
}
text
}.await()