我有下一个代码。如您所见,里面有3个when
。可以展平此代码吗?我正在考虑一些包装纸,但无法获取。目前,我看到的唯一解决方案是将每次移动到fun
之类的processFirstWhen
等。也许有一个更清洁的解决方案。任何帮助表示赞赏。
when (val result = callback.invoke()) {
is DataCompletable.Success -> DomainCompletable.Success
is DataCompletable.Error ->
when (result.error) {
is DataError.Unauthorized ->
when (tokenMixIn.refresh()) {
is DomainCompletable.Success -> execute(
currentNumberOfRetries + 1,
callback
)
is DomainCompletable.Error -> DomainCompletable.Error(DomainError.RefreshFailed)
}
else -> DomainCompletable.Error(result.error.mapToDomain())
}
答案 0 :(得分:1)
容易!但不使用when
。
我想用if
的平面层次结构代替它。
赞:
val result = callback.invoke()
if(result is DataCompletable.Success) return DomainCompletable.Success
val error = result.error
if(error !is DataError.Unauthorized) return DomainCompletable.Error(result.error.mapToDomain())
val refreshResult = tokenMixIn.refresh()
if(refreshResult is DomainCompletable.Error) return DomainCompletable.Error(DomainError.RefreshFailed)
execute(currentNumberOfRetries + 1, callback)
这里的关键是短路。我们尽快返回结果。而且,我们还可以使代码更加平坦和易于理解。