|
@@ -1,15 +1,28 @@
|
|
|
-## 作用域异常中断
|
|
|
-一个作用域内常常有多个请求发生. 默认情况下一个请求发生错误就会取消所在作用域, 然后间接取消所有子作用域 (即取消所在作用域的所有请求).
|
|
|
+## 默认异常处理
|
|
|
+Net具备完善的异常处理机制, 默认情况发生错误会执行以下操作
|
|
|
|
|
|
+1. `Logcat`中显示详细的异常堆栈信息
|
|
|
+2. `Toast`吐司显示异常信息(默认使用内置的异常文本信息)
|
|
|
+
|
|
|
+要改变以上异常处理流程就需要自定义异常处理器
|
|
|
+
|
|
|
+捕获异常分为两种
|
|
|
+
|
|
|
+1. 作用域内部异常捕获
|
|
|
+2. 捕获整个作用域内部所有异常
|
|
|
+
|
|
|
+## 作用域内部异常捕获
|
|
|
+一个作用域内常常有多个请求发生. 默认情况下一个请求发生错误就会取消当前作用域内部所有协程
|
|
|
+
|
|
|
+例如
|
|
|
```kotlin
|
|
|
scopeNetLife {
|
|
|
Get<String>("api").await() // 失败
|
|
|
Get<String>("api2").await() // 上面失败, 此处也不会执行
|
|
|
}
|
|
|
```
|
|
|
-虽然示例代码是同步请求, 但是实际上并发请求也是如此.
|
|
|
|
|
|
-除非你catch住错误
|
|
|
+捕获第一个协程避免终止后续执行
|
|
|
```kotlin
|
|
|
scopeNetLife {
|
|
|
try {
|
|
@@ -19,25 +32,31 @@ scopeNetLife {
|
|
|
Get<String>("api2").await() // 上面失败, 此处继续执行
|
|
|
}
|
|
|
```
|
|
|
-或者你创建不同的作用域分别请求
|
|
|
+当然如果你创建不同的作用域分别请求那是互不影响的
|
|
|
+```kotlin
|
|
|
+scopeNetLife {
|
|
|
+ Get<String>("api").await() // 失败
|
|
|
+}
|
|
|
+scopeNetLife {
|
|
|
+ Get<String>("api2").await() // 上面失败, 此处完全不受影响
|
|
|
+}
|
|
|
+```
|
|
|
|
|
|
-## 默认错误处理
|
|
|
-Net具备完善的错误处理机制, 默认情况发生错误会执行
|
|
|
+## 捕获整个作用域
|
|
|
|
|
|
-1. Logcat 显示详细的异常堆栈信息
|
|
|
-2. Toast 显示异常信息(内置的异常文本信息)
|
|
|
+捕获整个作用域分为两类
|
|
|
|
|
|
-要改变以上错误处理流程就需要自定义错误处理器
|
|
|
+1. 单例处理异常(针对每个作用域)
|
|
|
+2. 全局处理异常(针对所有作用域, [个别除外](#scope))
|
|
|
|
|
|
-## 单例处理异常
|
|
|
+### 单例处理异常
|
|
|
```kotlin
|
|
|
scope {
|
|
|
val data = Get<String>("http://www.thisiserror.com/").await()
|
|
|
}.catch {
|
|
|
// 协程内部发生错误回调, it为异常
|
|
|
- handleError(it) // 该函数会将错误再次传递给全局错误回调处理
|
|
|
}.finally {
|
|
|
- // 协程内全部执行完成回调(包括子协程), it为异常
|
|
|
+ // 协程内协程全部执行完成, it为异常(如果是正常结束则it为null)
|
|
|
}
|
|
|
```
|
|
|
|
|
@@ -45,14 +64,14 @@ scope {
|
|
|
|
|
|
| 函数 | 描述 |
|
|
|
|-|-|
|
|
|
-| catch | 作用域被`catch`则不会被传递到全局异常处理回调中: [全局处理异常](error-handle.md), 除非使用`handleError`再次传递给全局 |
|
|
|
+| catch | 作用域被`catch`则不会被传递到全局异常处理回调中: [全局处理异常](exception-handle.md), 除非使用`handleError`再次传递给全局 |
|
|
|
| finally | 同样可以获取到异常对象, 且不影响全局异常回调处理 |
|
|
|
|
|
|
-## 全局处理异常
|
|
|
+### 全局处理异常
|
|
|
|
|
|
Net默认就会处理异常错误避免崩溃. 但是如果你想要自定义或者监听全局错误, 你可以覆盖默认的错误处理. 在`initNet`或者`NetConfig.errorHandler`函数里面自定义全局错误处理
|
|
|
|
|
|
-默认情况下不需要去定义错误处理, 因为`NetErrorHandler`默认实现适用于大部分情况的错误处理.
|
|
|
+默认情况下不需要去定义异常处理, 因为`NetErrorHandler`默认实现适用于大部分情况的异常处理.
|
|
|
|
|
|
|场景|处理函数|处理方式|
|
|
|
|-|-|-|
|
|
@@ -110,7 +129,7 @@ NetConfig.init("http://localhost:80/") {
|
|
|
转换器中发生的所有异常除非是NetException的子类否则都将被ConvertException包裹(即捕获的是ConvertException).
|
|
|
|
|
|
|
|
|
-## 覆盖默认错误处理
|
|
|
+## 覆盖默认异常处理
|
|
|
|
|
|
覆盖默认错误处理有两种方式
|
|
|
|