news 2026/9/16 9:35:59

HarmonyOS 7 互动卡片重复提交:两个入口同时点击,服务端怎样识别同一次动作

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
HarmonyOS 7 互动卡片重复提交:两个入口同时点击,服务端怎样识别同一次动作

HarmonyOS 7 互动卡片重复提交:两个入口同时点击,服务端怎样识别同一次动作

页面按钮禁用只能约束一个界面。卡片和应用页同时发起同一个动作时,各自的防抖状态互不相通。需要把操作身份带到结果保存的位置,而不是只在界面保存一个loading变量。

适配范围

这里的回执表只演示同步单进程行为,不是可直接部署的服务端。生产需要唯一索引、事务和持久化;异步副作用或崩溃窗口必须另行处理。JSON指纹要求字段顺序固定,正式协议应明确规范序列化。

案例一

卡片与应用页使用同一个操作标识:两次提交返回同一回执,副作用只执行一次。

案例二

错误复用了操作标识:相同key却携带不同item,必须冲突报错,不能返回上一次操作的成功回执。

可以运行的实现

export class ReceiptStore { receipts = new Map(); submit(key, payload, perform) { const fingerprint = JSON.stringify(payload); const old = this.receipts.get(key); if (old) { if (old.fingerprint !== fingerprint) throw Error('key_payload_conflict'); return old.result; } const result = perform(payload); this.receipts.set(key, {fingerprint, result}); return result; } }

复现与断言

把实现与以下测试放进同一个example.mjs,执行node example.mjs。断言失败会报错,全部通过正常退出。这些断言已经在本地Node.js执行;它们不代表SDK编译、真机接口调用或性能实测已经通过。

import assert from 'node:assert/strict'; let calls = 0; const service = new ReceiptStore(); const action = {item:'A',count:1}; const perform = () => ({receipt:++calls}); assert.equal(service.submit('operation-1',action,perform).receipt, 1); assert.equal(service.submit('operation-1',action,perform).receipt, 1); assert.equal(calls, 1); assert.throws(() => service.submit('operation-1',{item:'B',count:1},perform)); assert.equal(service.submit('operation-2',action,perform).receipt, 2);

方案取舍

界面防抖改善体验,但不提供跨入口幂等。操作key与参数指纹组合能发现重复与误复用;单纯按参数去重会误伤两次合法的相同操作。

接入时别漏掉这些边界

这里的回执表只演示同步单进程行为,不是可直接部署的服务端。生产需要唯一索引、事务和持久化;异步副作用或崩溃窗口必须另行处理。JSON指纹要求字段顺序固定,正式协议应明确规范序列化。

复用时把输入获取与纯逻辑分开:界面、系统事件和服务请求负责取得真实输入,独立模块负责给出判断或保存状态。保留上述两个案例作为回归测试,并对失败原因记录最少必要日志,不记录文件内容、账号凭据或其它敏感数据。升级SDK后重新核对支持设备、接口版本与错误行为,而不是只改目标版本号。

官方资料

HarmonyOS 官方能力入口

示例验证环境为Node.js,验证范围是应用侧逻辑。本文不将示例当作系统接口接入代码;具体接口的支持设备、最低版本和调用方式,以所用SDK对应的官方文档为准。

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/9/16 9:35:29

Bland-Altman分析实战:从LoA计算到临床决策翻译

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

作者头像 李华
网站建设 2026/9/16 9:35:22

Python Barrier 栅栏详解:基于最新版本的并发同步实践

Python Barrier 栅栏详解:基于最新版本的并发同步实践一、Python Barrier 栅栏详解1、 引言2、 Barrier 是什么2.1、 核心概念3、 基本用法3.1 、创建 Barrier3.2、 线程等待4、 Barrier 的完整 API4.1 、构造参数4.2、 实例方法4.3 、实例属性5、 进阶用法5.1 、使…

作者头像 李华
网站建设 2026/9/16 9:35:19

机器码重置原理与一键工具实现详解

1. 机器码重置的背景与需求机器码(Machine Code)是计算机硬件识别和执行的底层指令集,它直接对应CPU的指令架构。在软件授权和硬件识别领域,机器码常被用作设备唯一标识符。当用户遇到软件授权问题、硬件更换或系统重装等情况时&a…

作者头像 李华
网站建设 2026/9/16 9:34:46

云服务器与Linux入门:新手快速上手指南

1. 云服务器与Linux入门指南对于刚接触云计算和Linux系统的新手来说,如何快速上手云服务器和Linux操作系统是一个常见需求。作为在云计算行业工作多年的从业者,我将分享一套经过实践验证的快速入门方法。1.1 为什么选择云服务器Linux组合云服务器提供了弹…

作者头像 李华
网站建设 2026/9/16 9:34:32

广濑FH35C连接器:0.3mm间距SMD设计与高密度应用

1. 产品概述:广濑FH35C系列连接器FH35C-31S-0.3SHW(50)是日本广濑电机(Hirose Electric)推出的SMD表面贴装型FFC/FPC连接器,属于FH35系列中的0.3mm间距产品。这款连接器专为高密度电子设备设计,在超薄型消费电子产品中表现尤为突出。其型号命…

作者头像 李华
网站建设 2026/9/16 9:33:53

十分钟搞定MicroPython开发环境:PyCharm+miniconda+固件烧录全攻略

最近后台私信里问 MicroPython 环境搭建的人特别多,仔细聊下来,绝大多数人卡在同一个共性问题上:PyCharm 装了、代码也写了,但配独立环境、连开发板、烧录固件,每一步都像缺一块拼图。其实一条链路就能解决&#xff1a…

作者头像 李华