const { value,done } = await reader.read();
在文档中使用了上面的一行(https://web.dev/serial/)来读取来自串行端口的数据。如果说done将在串行设备发送的所有数据都被读取时变为true。但它不会变为true,因为它在while循环中,我的代码在这一行卡住了,进一步等待所述串行设备发送新数据,即使所述串行设备已经发送了所有数据。
(我使用的是Chrome浏览器,Windows,代码是用js文件写的)
const { value,done } = await reader.read();
在文档中使用了上面的一行(https://web.dev/serial/)来读取来自串行端口的数据。如果说done将在串行设备发送的所有数据都被读取时变为true。但它不会变为true,因为它在while循环中,我的代码在这一行卡住了,进一步等待所述串行设备发送新数据,即使所述串行设备已经发送了所有数据。
(我使用的是Chrome浏览器,Windows,代码是用js文件写的)
2条答案
按热度按时间gdrx4gfi1#
我找到了一个解决办法。我所做的是每当ReceivedData更新为'\u0004\u0003'字符串时,这意味着串行设备已经完成了数据传输,因为'\u0004\u0003'意味着EOTETX(传输结束,文本结束)。至少在我的情况下,它工作了,因为我知道串行设备在STX和EOTETX中 Package 它的实际消息的方式。
参考下面的代码,对我所说的有一个正确的想法。我是这样写的:
字符串
i7uaboj42#
我在文档中读到了同样的信息,也很困惑。我只是在调用
reader.cancel()
后才观察到done=true
。也许文档应该澄清一下。在cancel之后需要它来跳出while循环。
你可以在我的https://webserial.io源代码中看到它:
https://github.com/williamkapke/webserial/blob/8ae91a2fd978eede59182c2a4b28725c12c932a8/src/stores/connection.js#L107