HarmonyOS 鸿蒙Next从底层频繁回调到JS,保存的数据有问题
HarmonyOS 鸿蒙Next从底层频繁回调到JS,保存的数据有问题 1、把一包包音频数据从JS传到C层,然后解码,最后返回JS保存成文件。 2、这是一个循环过程,每包数据间隔是10-30ms。 3、结果JS保存的数据是有问题的,而在回调前,在C层保存没问题。
C代码片段:
static int decode_stream_output(void *buf, int size, void *priv) {
NapiContext *napiContext = (NapiContext *)priv;
CallbackContext *callbackContext = (CallbackContext *)malloc(sizeof(CallbackContext));
callbackContext->size = size;
callbackContext->buf = (unsigned char *)malloc(sizeof(unsigned char) * size);
memcpy(callbackContext->buf, buf, size);
fwrite(callbackContext->buf, 1, callbackContext->size, fout);//在这保存的数据没问题
napi_acquire_threadsafe_function(napiContext->threadSafeFunc);
napi_call_threadsafe_function(napiContext->threadSafeFunc, callbackContext, napi_tsfn_blocking);
return 0;
}
JS代码片段:
let listener: OnStreamDecodeListener = {
onDecoded: (outData: ArrayBuffer): void => {
writeStream.write(outData).then((writeSize) => {//保存的数据有问题
writeStream.flush();
})
}
}
nativeAPI.setOnStreamDecodeListener(listener)
更多关于HarmonyOS 鸿蒙Next从底层频繁回调到JS,保存的数据有问题的实战系列教程也可以访问 https://www.itying.com/category-93-b0.html
调用 writeStream.write(outData)
函数时,Node.js 会尝试将数据写入流,但不会等待写入操作完成就继续执行后面的代码。在异步 write
的情况下,您可能在数据完全写入之前就调用了 flush
或其他后续操作,导致保存的数据有误。而在同步 writeSync
的情况下,数据完全写入后才会继续执行后续的代码。
您可以在 writeStream.write
和 writeStream.flush
调用中添加错误处理逻辑捕获并处理可能出现的异常或错误,以验证您的猜想。
关于IR的评论框贴代码您可以勾选左下角Markdown选项,将代码块包裹在 ``` 符号中,就像您在“基本信息”中的写法一样(这块我们不可编辑,不清楚是否支持markdown),效果如下:
writeStream.write(outData).then((writeSize) => { //保存的数据有问题
writeStream.flush(); // 这里是在then之后才调用flush
})
更多关于HarmonyOS 鸿蒙Next从底层频繁回调到JS,保存的数据有问题的实战系列教程也可以访问 https://www.itying.com/category-93-b0.html
针对“HarmonyOS 鸿蒙Next从底层频繁回调到JS,保存的数据有问题”这一问题,可能的原因及解决方案如下:
原因:
- 数据同步问题:底层与JS层之间的数据同步可能存在延迟或冲突,导致数据在传输过程中被覆盖或丢失。
- 回调机制缺陷:频繁的回调可能导致资源竞争或数据状态不一致,进而影响数据的保存。
- 存储机制问题:JS层或底层存储数据时可能存在逻辑错误或性能瓶颈,导致数据保存不正确。
解决方案:
- 优化数据同步机制:确保底层与JS层之间的数据同步是可靠的,可以考虑使用事务机制或加锁策略来避免数据冲突。
- 调整回调策略:减少不必要的回调,或优化回调的触发条件,以降低资源竞争和数据状态不一致的风险。
- 检查并修复存储逻辑:仔细检查底层和JS层的存储逻辑,确保数据的正确性和完整性。同时,优化存储性能,避免性能瓶颈。
请注意,以上解决方案可能需要根据具体的应用场景和代码实现进行调整。如果问题依旧没法解决请联系官网客服,官网地址是:https://www.itying.com/category-93-b0.html