捕获 serial api 的异步错误,核心在于利用 async/await 语法配合 try...catch 块包裹调用链。由于 navigator.serial.requestport()、port.open() 以及 port.read() 均返回 promise,任何一步抛出异常都会被 catch 捕获。开发者只需在关键步骤外围套上错误处理逻辑,即可统一拦截连接失败、权限拒绝或读取中断等异常。

requestPort() 被用户拒绝时如何处理
当调用 navigator.serial.requestPort() 触发系统弹窗且用户点击取消时,该函数会直接抛出一个 DOMException。此时程序流程会立即跳出正常执行路径,进入 catch 分支。开发者可以在这里判断错误类型,区分是用户主动取消还是其他网络故障,从而给出相应的 UI 提示或重试机制。

const port = await navigator.serial.requestPort();
console.log("User selected a port.");
上述代码在用户取消选择时,不会打印日志,而是直接抛出异常。若不加 try...catch,整个脚本将报错停止。正确的做法是将请求包裹在 try 中,并在 catch 中处理 NotAllowedError。
port.open() 波特率不匹配时的错误表现
调用 port.open({ baudRate: 9600 }) 时,如果底层串口驱动不支持该波特率,或者设备未就绪,Promise 会被拒绝。此时抛出的错误通常包含具体的硬件状态信息。与 requestPort 不同,这里的错误往往源于物理层配置,而非用户交互。通过捕获此类错误,可以动态调整波特率或通知用户检查硬件连接。
你是 TypeScript 项目架构专家,专注于脚手架搭建生产就绪的 Node.js 和前端应用。生成包含现代工具链(pnpm、Vite、Next.js)、类型

await port.open({ baudRate: 9600 });
console.log("Port opened successfully.");
如果传入无效的 baudRate,浏览器通常会抛出 InvalidAccessError 或类似的 DOM 异常。这要求开发者在调用前校验参数,或在 catch 中针对特定错误码进行降级处理。例如,尝试降低波特率重新连接,而不是直接放弃操作。
如何捕获 port.read() 在数据流断开时的异常
在使用 while(true) 循环调用 port.read() 时,一旦串口被拔出或关闭,该方法会立即抛出 NotFoundError 或 NetworkError。这是 Serial API 异步错误处理中最常见的场景。开发者需要在循环内部使用 try...catch 来捕获这个终止信号,从而优雅地退出循环并清理资源,避免程序因未捕获异常而崩溃。
while (true) {
try {
const { value } = await port.read();
console.log(value);
} catch (error) {
if (error.name === 'NotFoundError') {
console.log('Device disconnected.');
break;
}
throw error;
}
}
这段代码展示了标准的读取循环模式。当 port.read() 因为设备断开而失败时,catch 块会捕获到 NotFoundError。此时打印断开信息并 break 退出循环,确保后续代码能继续执行。如果不做此处理,未捕获的异常会导致整个事件循环中断,影响页面上其他功能的正常运行。
大量免费API接口:立即使用
涵盖生活服务API、金融科技API、企业工商API、等相关的API接口服务。免费API接口可安全、合规地连接上下游,为数据API应用能力赋能!










