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 === 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:定制 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 支持
相关推荐
qq_284274054 小时前
机械设计基础·滚动轴承全解(类型·代号·选型·寿命)+轮系与蜗杆蜗轮传动
笔记·学习·自动化·制造
ACP广源盛139246256739 小时前
硬件选型笔记:国产 PCIe Gen2.1 交换芯片 IX6024@ACP,工控与存量设备国产化改造方案评估
笔记·硬件架构·硬件工程·pcie·国产芯片
文人sec10 小时前
SQL基础入门笔记 | 从零基础到掌握核心查询语句
数据库·笔记·sql
程序猿追10 小时前
kotlin-retry 接入鸿蒙后,怎样确认它真的会停止重试
开发语言·kotlin·harmonyos
摇滚侠11 小时前
《计算机是如何工作的:人人都能懂的计算机软硬件工作原理》第 9 章 机器码与汇编语言 阅读笔记 9
java·开发语言·笔记
xier_ran12 小时前
【infra之路】AI 编译器学习笔记(六):重拾 C++——lambda 与 MLIR 中的回调
c++·笔记·学习
志尊宝12 小时前
Vue3 零基础每日笔记(078):首屏加载速度优化汇总——清单化方案
笔记
懿路向前14 小时前
HarmonyOS 粒子特效实战:emitter.size 是双刃剑:粒子精确定位 [0,0] 与条带随机出生(HarmonyOS)
华为·harmonyos
马剑威(威哥爱编程)14 小时前
【共创稿事节】HarmonyOS 7 Agent 开发实战 04:云端 RAG 搭企业私有知识库问答
人工智能·华为·harmonyos
贾伟康15 小时前
【晨迹相机|20】HarmonyOS ArkTS AppGallery 发布复查实战:核对包名、版本、设备、素材和离线声明
harmonyos·arkts·appgallery·发布审核·上架复查