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 支持
相关推荐
NULL指向我16 小时前
STM32F407VET6学习笔记14:Bootloader程序笔记
笔记·stm32·学习
cz追天之路16 小时前
华为机考 ------ 识别有效的IP地址和掩码并进行分类统计
javascript·华为·typescript·node.js·ecmascript·less·css3
伶星3716 小时前
obsidian 日记按年月存放
笔记
日更嵌入式的打工仔16 小时前
Ehercat代码解析中文摘录<1>
网络·笔记·ethercat
别了,李亚普诺夫16 小时前
定时器与输出比较-学习笔记
笔记·stm32·学习
于越海17 小时前
学习小项目:用 Python 自动统计编程课绩点(5.0 制|百分制直算|重修取最高)
开发语言·笔记·python·学习·学习方法
航Hang*17 小时前
第五章:网络系统建设与运维(中级)——生成树协议
运维·服务器·网络·笔记·华为·ensp
CYTElena18 小时前
JAVA关于集合的笔记
java·开发语言·笔记
shuangrenlong18 小时前
笔记ANR原理
笔记
wdfk_prog19 小时前
[Linux]学习笔记系列 -- [fs]mnt_idmapping
linux·笔记·学习