事件循环不直接处理nfc读取,而是调度web nfc异步操作完成后的promise回调。nfc由系统服务执行,结果通过微任务队列交还js,需https、用户手势触发及权限请求,并妥善处理各类reject情形。

JavaScript 的事件循环本身不直接处理 NFC 读取——NFC 操作由浏览器或操作系统底层 API(如 Web NFC)触发,其异步结果通过 Promise 或事件机制交还给 JS 运行时,再由事件循环调度执行回调。
Web NFC 是基于 Promise 的异步 API
现代浏览器中(如 Chrome Android),NFCReader 的 read() 方法返回一个 Promise:
- 调用
nfc.read()时,JS 引擎立即返回 Promise 对象,不阻塞主线程; - 实际的 NFC 标签探测、射频通信、数据解析由系统级 NFC 服务完成;
- 当标签读取成功(或失败),系统通过 IPC 通知浏览器,浏览器将 resolve/reject 回调加入微任务队列(microtask queue);
- 当前同步代码执行完后,事件循环检查微任务队列,执行
.then()或.catch()中的回调。
事件循环只负责调度,不参与 NFC 底层通信
事件循环不会“等待” NFC 硬件响应。它完全依赖平台提供的异步通知机制:
在 Java 中初始化和管理阿里云 SDK客户端。包括单例模式、线程安全、endpoint 与 region 配置、VPC 终端节点、同步与异步等。
- Web NFC 规范要求浏览器在 NFC 操作完成时,以异步方式(通常是 Promise fulfillment)把结果交还 JS;
- 这个过程类似
fetch()或setTimeout():JS 发起请求 → 浏览器委托系统/内核 → 系统完成后再触发 JS 回调; - 如果设备不支持 NFC、权限被拒、或标签未靠近,
read()会 reject,同样走微任务流程。
注意兼容性与权限时机
Web NFC 目前仅限安全上下文(HTTPS)、Android Chrome(需启用 flag)、且需用户手势触发(如点击按钮):
- 不能在页面加载时自动调用
nfc.read(),否则会因缺少用户激活而抛出SecurityError; - 首次调用前通常需先调用
navigator.nfc.requestPermission(),这也是 Promise 链的一部分; - 错误处理必须覆盖:标签移除过快、格式不支持(如 NDEF 解析失败)、超时等,这些都会导致 Promise reject,进入事件循环的微任务处理。
不复杂但容易忽略:NFC 不是 JS 原生能力,事件循环只是忠实执行浏览器转交的异步结果——关键在正确使用 Web NFC API 的 Promise 流程,并响应好各类拒绝情形。
Java免费学习笔记:立即使用
解锁 Java 大师之旅:从入门到精通的终极指南










