我想确保在连接到 Chrome(通过 WebUSB)端点的设备上不包含来自以前批量传输的消息。我检查了 WebUSB 的 API: https ://wicg.github.io/webusb/ ,我没有看到任何允许清空缓冲区的刷新函数。我正在考虑在设备返回 NAK 之前读取数据 - 如下所示:
/* #1 Make sure that IN endpoint contains no more data */
while (true) {
let result = await data.transferIn(1, 6);
if (result.length === 0) {
break;
}
}
/* #2 Send request */
await data.transferOut(0x81, message);
/* #3 Receive valid request */
let result = await data.transferIn(1, 6);
但不幸的是,看起来没有好的解决方案:
- 当没有更多数据要读取时, transferIn() 成为阻塞函数 - 所以我们不能在异步调用 transferIn() 上进行中继
- 当在超时的承诺中调用 transferIn() 时,我们可以以多个等待传入数据的承诺结束(这很糟糕,因为我们不知道哪个承诺会接收数据)
确保设备 IN 端点不包含数据的最佳方法是什么?