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();
});
关键点只有两个:
- 定义
processing,里头实现validateResponse(response): boolean - 把它挂到
request.configuration.processing上
2. validateResponse 的行为逻辑
你可以理解成:
收到响应 → 先调用 processing.validateResponse(response)
如果返回 true → 当成"成功响应",走 then 分支
如果返回 false → 当成"错误",走 catch 分支(会包装成 BusinessError)
所以在示例中:
- 当
statusCode === 200→then分支被调用; - 当
statusCode !== 200→catch分支被调用。
和不使用 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:定制 DNSTransferConfiguration:定制超时等传输策略ProxyConfiguration:定制代理行为SecurityConfiguration:定制安全 / 证书 / PinningProcessingConfiguration:定制响应怎么被判断成成功或失败
在实际项目里,一个 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 支持