(in promise) TypeError: Failed to execute ‘close’ on ‘SerialPort’: Cannot cancel a locked stream报错
背景
使用Web Serial API的关闭串口连接时遇到一个报错,导致关闭串口失败
我使用的文档主要是以下几个
https://web.dev/serial/#what
https://blog.youkuaiyun.com/weixin_43155762/article/details/116888996
https://zhuanlan.zhihu.com/p/456427866
错误信息
解决思路
使用 port 的 close 方法可以关闭串口,前提是串口的 readable 和 writable 被解锁,调用其上的 releaseLock 方法即可解锁。当想要在在串口接受数据过程中关闭串口,需要调用 reader 的 cancel 方法将 reader.read()的返回值变为为 {value: undefined, done: true},从而允许调用 reader.releaseLock。最后调用 port 的 close 方法。
解决办法
关闭串口的运行顺序必须是
1、串口的 readable 和 writable 被解锁
reader.releaseLock();
writer.releaseLock();
2、关闭串口
await port.close()
debug一下就知道怎么回事了