HarmonyOS —— Remote Communication Kit 定制处理行为(ProcessingConfiguration)速记笔记

HarmonyOS ------ Remote Communication Kit 定制处理行为(ProcessingConfiguration)速记笔记

这一块就很像给 HTTP 请求挂一个"小审判官":

收到响应之后,先让它过一遍你自己的规则,再决定走 then 还是 catch


一、ProcessingConfiguration 是干嘛的?

鸿蒙开发者第四期活动

在 Remote Communication Kit 里,ProcessingConfiguration 用来定制"响应怎么被处理",典型能力:

  • 在响应分发到各个处理器 之前 / 之后 做自定义逻辑;
  • 做统一的 状态码校验(比如只认 200);
  • 后面你也可以扩展用于:
    • 统一记录日志 / 打点统计;
    • 把"业务错误"转成异常;
    • 做统一的重试触发逻辑等。

官方示例里的场景就是:

检验响应状态是否为成功 ------ 即 HTTP 状态码是否为 200


二、设备与版本限制(跟前几篇一样)

  • 支持:Phone / 2in1 / Tablet / Wearable
  • 5.1.1(19) 起:新增 TV 支持

一句话背:

ProcessingConfiguration 支持 Phone / 2in1 / Tablet / Wearable,5.1.1(19) 起新增 TV


三、核心用法:validateResponse 钩子

1. 基本结构

官方示例代码拆一下:

复制代码
import { rcp } from '@kit.RemoteCommunicationKit';
import { BusinessError } from '@kit.BasicServicesKit';

// 创建会话 & 请求
const session = rcp.createSession();
const request = new rcp.Request('https://www.example.com');

// 定义处理配置:验证响应状态码是否为 200
const processing: rcp.ProcessingConfiguration = {
  validateResponse: (response: rcp.Response): boolean => {
    return response.statusCode === 200;
  },
};

// 将处理配置应用到请求
request.configuration = {
  processing: processing,
};

// 发请求
session.fetch(request).then((response: rcp.Response) => {
  // 只有 validateResponse 返回 true 才会走到这里
  if (response) {
    console.info(`Response received with status code: ${response.statusCode}`);
  } else {
    console.error('No response received');
  }
  session.close();
}).catch((err: BusinessError) => {
  // validateResponse 返回 false,会走这里
  console.error(`The error is: ${JSON.stringify(err)}`);
  session.close();
});

关键点只有两个:

  1. 定义 processing,里头实现 validateResponse(response): boolean
  2. 把它挂到 request.configuration.processing

2. validateResponse 的行为逻辑

你可以理解成:

复制代码
收到响应 → 先调用 processing.validateResponse(response)

  如果返回 true  → 当成"成功响应",走 then 分支
  如果返回 false → 当成"错误",走 catch 分支(会包装成 BusinessError)

所以在示例中:

  • statusCode === 200then 分支被调用;
  • statusCode !== 200catch 分支被调用。

和不使用 ProcessingConfiguration 的差别在于:

默认情况下,"网络请求成功但状态码不是 2xx",可能仍被视为 then 分支;

validateResponse 之后,你可以强制"只要不满足我定义的条件,就一律当异常处理"。


四、实践延伸:你可以怎么玩?

官方例子只是最简单的"检查是不是 200"。在实际 HarmonyOS 项目中,ProcessingConfiguration 可以这样用:

1. 统一"业务成功"检查(例如 code === 0

很多接口都是:

复制代码
{
  "code": 0,
  "msg": "ok",
  "data": { ... }
}

你可以在 validateResponse 里,先检查 HTTP 状态码,再简单 parse 一下 body:

(示意:实际需要通过 response.toString() 或流式读取)

复制代码
const processing: rcp.ProcessingConfiguration = {
  validateResponse: (response: rcp.Response): boolean => {
    if (response.statusCode !== 200) {
      return false;
    }
    // 伪代码:假设能拿到 JSON
    try {
      const body = JSON.parse(response.toString());
      return body.code === 0;   // 只有业务 code == 0 才认为成功
    } catch (e) {
      return false;
    }
  }
};

这样:

  • HTTP 200 但业务失败(code≠0) → 直接走 catch
  • 界面层就不需要每次再写一堆 if (code !== 0) 判断了。

2. 统一打日志 / 告警

你也可以在 validateResponse 里顺带记一笔日志:

复制代码
const processing: rcp.ProcessingConfiguration = {
  validateResponse: (response: rcp.Response): boolean => {
    console.info('HTTP status:', response.statusCode);
    // TODO: 这里可以上报埋点 / 打印 header / 统计耗时等
    return response.statusCode >= 200 && response.statusCode < 300;
  },
};

之后所有通过这个配置发的请求,都自动带上统一的日志。


3. 和其它 Configuration 组合拳

现在你已经有了:

  • DnsConfiguration:定制 DNS
  • TransferConfiguration:定制超时等传输策略
  • ProxyConfiguration:定制代理行为
  • SecurityConfiguration:定制安全 / 证书 / Pinning
  • ProcessingConfiguration:定制响应怎么被判断成成功或失败

在实际项目里,一个 request 可以大致这么配:

复制代码
request.configuration = {
  dns: { /* ... */ },
  transfer: { /* ... */ },
  proxy: { /* ... */ },
  security: { /* ... */ },
  processing: {
    validateResponse: (res) => res.statusCode === 200,
  },
};

完全就是:从"怎么连""经谁转""如何加密""怎么判成功"全链路自己掌控


五、速记小抄(考点版)

你可以直接贴到自己的 HarmonyOS 笔记里用:

  • ProcessingConfiguration 作用
    • 用于 定制响应处理行为
    • 允许在响应分发前执行自定义逻辑,如校验状态码、业务 code、日志打印等。
  • 核心字段
    • processing.validateResponse: (response: rcp.Response) => boolean
      • 返回 true:视为成功响应,触发 session.fetch().then(...)
      • 返回 false:视为错误,触发 session.fetch().catch(...)(包装为 BusinessError
  • 典型用途
    • 统一"成功条件":例如 只认 statusCode === 200
    • 加一层业务级判断:code === 0 才算成功;
    • 统一日志、打点、统计响应质量。
  • 设备支持
    • Phone / 2in1 / Tablet / Wearable
    • 自 5.1.1(19) 起新增 TV 支持
相关推荐
氤氲息2 小时前
鸿蒙 ArkTs 的WebView如何与JS交互
javascript·交互·harmonyos
遇到困难睡大觉哈哈2 小时前
HarmonyOS支付接入证书准备与生成指南
华为·harmonyos
赵浩生2 小时前
鸿蒙技术干货10:鸿蒙图形渲染基础,Canvas绘图与自定义组件实战
harmonyos
赵浩生2 小时前
鸿蒙技术干货9:deviceInfo 设备信息获取与位置提醒 APP 整合
harmonyos
BlackWolfSky3 小时前
鸿蒙暂未归类知识记录
华为·harmonyos
暴风游侠3 小时前
linux知识点-服务相关
linux·服务器·笔记
TL滕3 小时前
从0开始学算法——第十二天(KMP算法练习)
笔记·学习·算法
Kapibalapikapi4 小时前
工具 | netcat, netstat
网络·笔记·逆向
IMPYLH4 小时前
Lua 的 warn 函数
java·开发语言·笔记·junit·lua