HarmonyOS 鸿蒙Next usbManager.bulkTransfer 中断传输 可预期的超时 老是有接口内部错误和崩溃
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进行处理,但是实事上,超时接口内部会报错以及报崩溃堆栈,如下(不影响流程)
有哪位老哥知道如何设置不打印这些错误?
更多关于HarmonyOS 鸿蒙Next usbManager.bulkTransfer 中断传输 可预期的超时 老是有接口内部错误和崩溃的实战系列教程也可以访问 https://www.itying.com/category-93-b0.html
好的,明白了,应该是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驱动的不稳定、传输缓冲区管理不当或数据传输协议层面的异常。
处理这类问题,可以尝试以下几个方向:
-
确认USB设备兼容性:确保连接的USB设备与HarmonyOS系统的兼容性,避免由于设备本身固件或硬件问题导致的传输异常。
-
优化传输参数:检查并调整
bulkTransfer
方法中的缓冲区大小、超时时间等参数,以适应实际数据传输需求,减少超时和错误发生的概率。 -
异常处理强化:在代码中增强异常处理逻辑,如添加重试机制、错误日志记录等,以便在传输中断或出错时,系统能够做出有效响应。
-
系统更新:检查HarmonyOS系统是否有可用的更新,及时升级以修复可能存在的系统bug。
如果问题依旧没法解决请联系官网客服,官网地址是:https://www.itying.com/category-93-b0.html 。客服团队将为您提供更专业的技术支持和解决方案。