结果处理
介绍
结果处理模块用来统一处理请求的成功与失败,减少重复的 try/catch 和提示逻辑。当前主要用于网络请求,如果业务需要处理数据库结果,也可以在这里新增对应的处理器文件。
使用方式
- 把仓库的 Promise 交给
RequestHelper.repository。 - 通过
start/loading/toast配置前置与提示行为。 - 用
execute获取 data,用response获取完整响应。
API
文件位置:core/result/src/main/ets/RequestHelper.ets
说明:T 为请求成功后的数据类型,对应仓库返回的业务实体。
| 方法 | 说明 | 参数 | 返回值 |
|---|---|---|---|
repository(promise) | 绑定请求 Promise | promise: Promise<NetworkResponse<T>> | RequestHelper<T> |
start(handler) | 设置请求开始前回调 | handler: () => void | RequestHelper<T> |
loading(enable) | 是否展示 loading | enable: boolean = false | RequestHelper<T> |
toast(enable) | 是否自动 toast 错误 | enable: boolean = true | RequestHelper<T> |
execute() | 执行请求并返回 data | - | Promise<T> |
response() | 执行请求并返回完整响应 | - | Promise<NetworkResponse<T>> |
网络请求示例
文件位置:feature/demo/src/main/ets/viewmodel/NetworkRequestViewModel.ets
下面截取 GET 请求的常见写法,展示如何用 RequestHelper 简化请求处理。
ts
import { BaseViewModel } from "base";
import { GoodsRepository } from "data";
import { Goods } from "model";
import { RequestHelper } from "result";
import { ToastUtils } from "util";
/**
* @file 通用网络请求示例页 ViewModel
*/
@ObservedV2
export default class NetworkRequestViewModel extends BaseViewModel {
/**
* 商品仓库
*/
private repository: GoodsRepository = new GoodsRepository();
/**
* 发起 GET 请求(商品详情)
*/
requestGoodsDetail() {
RequestHelper.repository<Goods>(this.repository.getGoodsInfo("1"))
.start((): void => {
// 处理请求开始前逻辑
})
.execute()
.then((data: Goods): void => {
// 处理 GET 请求成功逻辑
})
.finally((): void => {
// 处理请求结束后逻辑
});
}
}使用提示
execute()只返回 data,想拿到code和message用response()。toast()会自动弹出错误提示,业务里不用重复处理。loading(true)时,请求开始和结束都会自动展示/关闭 loading 提示。