直接跳到内容

结果处理

介绍

结果处理模块用来统一处理请求的成功与失败,减少重复的 try/catch 和提示逻辑。当前主要用于网络请求,如果业务需要处理数据库结果,也可以在这里新增对应的处理器文件。

使用方式

  1. 把仓库的 Promise 交给 RequestHelper.repository
  2. 通过 start / loading / toast 配置前置与提示行为。
  3. execute 获取 data,用 response 获取完整响应。

API

文件位置:core/result/src/main/ets/RequestHelper.ets

说明:T 为请求成功后的数据类型,对应仓库返回的业务实体。

方法说明参数返回值
repository(promise)绑定请求 Promisepromise: Promise<NetworkResponse<T>>RequestHelper<T>
start(handler)设置请求开始前回调handler: () => voidRequestHelper<T>
loading(enable)是否展示 loadingenable: boolean = falseRequestHelper<T>
toast(enable)是否自动 toast 错误enable: boolean = trueRequestHelper<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,想拿到 codemessageresponse()
  • toast() 会自动弹出错误提示,业务里不用重复处理。
  • loading(true) 时,请求开始和结束都会自动展示/关闭 loading 提示。