HarmonyOS 鸿蒙Next usbManager.bulkTransfer 中断传输 可预期的超时 老是有接口内部错误和崩溃

发布于 1周前 作者 gougou168 来自 鸿蒙OS

HarmonyOS 鸿蒙Next usbManager.bulkTransfer 中断传输 可预期的超时 老是有接口内部错误和崩溃

      const startTime = Date.now();
console.error(start read event~~~~~~~~~~~~~~);
let bytesRead = await usbManager.bulkTransfer(this.devicePipe, this.intBulk, eventChunk, 1000);
const elapsedTime = Date.now() - startTime;
console.error(end read event~~~~~~~~~~~~~~elapsedTime ${elapsedTime});<button style="position: absolute; padding: 4px 8px 0px; cursor: pointer; top: 8px; right: 8px; font-size: 14px;">复制</button>

当usb没有事件的时候,超时是可以预期的,我这边会根据elapsedTime进行处理,但是实事上,超时接口内部会报错以及报崩溃堆栈,如下(不影响流程)

有哪位老哥知道如何设置不打印这些错误?

cke_14320.pngcke_14999.png


更多关于HarmonyOS 鸿蒙Next usbManager.bulkTransfer 中断传输 可预期的超时 老是有接口内部错误和崩溃的实战系列教程也可以访问 https://www.itying.com/category-93-b0.html

5 回复

好的,明白了,应该是bulkTransfer 内部接口使用了回调函数来处理错误,而不是通过 Promise 机制抛出错误,所以没捕捉到错误,试试将 bulkTransfer 包装在一个新的 Promise 中,并在回调函数中正确处理错误和结果,最后在外层用 try-catch 捕捉。

const startTime = Date.now();
console.error(`start read event~~~~~~~~~~~~~~`);

try { let bytesRead = await new Promise((resolve, reject) => { usbManager.bulkTransfer(this.devicePipe, this.intBulk, eventChunk, 1000, (err, result) => { if (err) { reject(err); } else { resolve(result); } }); });

<span class="hljs-keyword">const</span> elapsedTime = <span class="hljs-built_in">Date</span>.now() - startTime;
console.error(`end read event~~~~~~~~~~~~~~elapsedTime ${elapsedTime}`);

} catch (error) { if (error.code === -7) { // 处理超时错误,不打印日志 } else { console.error(An error occurred: ${error.message}); } }

更多关于HarmonyOS 鸿蒙Next usbManager.bulkTransfer 中断传输 可预期的超时 老是有接口内部错误和崩溃的实战系列教程也可以访问 https://www.itying.com/category-93-b0.html


加上try catch模块捕捉超时错误就可以了。

const startTime = Date.now();
console.error(`start read event~~~~~~~~~~~~~~`);

try { let bytesRead = await usbManager.bulkTransfer(this.devicePipe, this.intBulk, eventChunk, 1000); const elapsedTime = Date.now() - startTime; console.error(end read event~~~~~~~~~~~~~~elapsedTime ${elapsedTime}); } catch (error) { // 选择打印不打印错误日志 console.error(An error occurred: ${error.message}); }

希望HarmonyOS能继续加强在安全性方面的研发,保护用户的隐私和数据安全。

感谢回复 我这边补充下,调用bulkTransfer的函数的入口 就已经做try catch的逻辑了

我把try catch的范围缩小到你说的就bulkTransfer还是一样的情况

目前看这个堆栈不会抛出异常走catch的逻辑,否则函数的后续打印如console.error(end read event~~~~~~~~~~~~~~elapsedTime ${elapsedTime});就不会触发了

在HarmonyOS鸿蒙Next系统中,对于usbManager.bulkTransfer方法在使用过程中遇到的中断传输、可预期的超时、接口内部错误和崩溃问题,主要原因可能涉及底层USB驱动的不稳定、传输缓冲区管理不当或数据传输协议层面的异常。

处理这类问题,可以尝试以下几个方向:

  1. 确认USB设备兼容性:确保连接的USB设备与HarmonyOS系统的兼容性,避免由于设备本身固件或硬件问题导致的传输异常。

  2. 优化传输参数:检查并调整bulkTransfer方法中的缓冲区大小、超时时间等参数,以适应实际数据传输需求,减少超时和错误发生的概率。

  3. 异常处理强化:在代码中增强异常处理逻辑,如添加重试机制、错误日志记录等,以便在传输中断或出错时,系统能够做出有效响应。

  4. 系统更新:检查HarmonyOS系统是否有可用的更新,及时升级以修复可能存在的系统bug。

如果问题依旧没法解决请联系官网客服,官网地址是:https://www.itying.com/category-93-b0.html 。客服团队将为您提供更专业的技术支持和解决方案。

回到顶部