跳转至

嵌套作用域

有时候可能面临嵌套的scope*函数或者作用域内有子作用域情况, 这个时候的生命周期是如何

嵌套Scope

scopeNet {
    val task = Post<String>("api0").await()

    scopeNet {
        val task = Post<String>("api0").await() // 此时发生请求错误
    }.catch {
        // A
    }
}.catch {
    // B
}
  • 以下嵌套作用域错误将会仅发生在A处, 并被捕获, 同时不影响外部scopeNet的请求和异常捕获
  • 两个scopeNet的异常抛出和捕获互不影响
  • scopeNet/scopeDialog/scope等函数同理

子作用域

scopeNet {
    val await = Post<String>("api").await()

    launch {
       val task = Post<String>("api0").await()  // 此时发生请求错误
    }.invokeOnCompletion {
        // A
    }
}.catch {
     // B
}
  • 这种情况 先执行A然后执行B, 并且都能捕获异常.
  • 同时scopeNet发生错误也会导致launch内的请求被取消, launch发生错误也会导致scopeNet发生错误