HarmonyOS 从底层频繁回调到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
      
        赞
        
 收藏 0
 回答 1
 
        待解决
        
相关问题
 Napi回调ArkTS,Native侧日志通过监听回调到JS侧 
2553浏览  • 1回复 待解决
HarmonyOS cpp数据回调到UI层如何做? 
979浏览  • 1回复 待解决
有没有从ts设置回调到c++层,然后c++再回调到ts的示例代码? 
2105浏览  • 1回复 待解决
HarmonyOS 子线程中,实时音频数据,回调到UI线程的最佳方案 
918浏览  • 1回复 待解决
fileio.write写buffer数据有问题 
5394浏览  • 1回复 待解决
HarmonyOS Camera kit 双路预览方案频繁开关相机底层崩溃 
1518浏览  • 1回复 待解决
HarmonyOS getSystemInfoSync() 返回的数据有误 
1205浏览  • 1回复 待解决
HarmonyOS JS和TS底层渲染模式 
1057浏览  • 1回复 待解决
native回调到ts层的object,ts层获取其成员变量 
2273浏览  • 1回复 待解决
HarmonyOS C++自创线程如何回调到ArkTS应用中? 
1250浏览  • 1回复 待解决
如何避免PersistentStorage因频繁写入大型数据导致的性能问题? 
430浏览  • 0回复 待解决
物联网产生的数据有什么特征? 
5396浏览  • 1回复 待解决
HarmonyOS cursor: dataRdb.ResultSet如何查询数据有几条数据 
786浏览  • 1回复 待解决
HarmonyOS 关于从HashMap里查找数据的问题 
855浏览  • 1回复 待解决
HarmonyOS  ListItemGroup中ListItem数据有更新,如何刷新List? 
1312浏览  • 1回复 待解决
mysqldump搭建从库同步数据问题 
4196浏览  • 0回复 待解决
调用Scan Kit扫描专用底层码流接口访问数据问题 
2644浏览  • 1回复 待解决
HarmonyOS Swiper填充数据后,onChange方法的回调是从index=1开始的,预期是从index=0开始的 
1318浏览  • 1回复 待解决
业务数据频繁更新的场景 用redis是否合适? 
3839浏览  • 1回复 待解决
HarmonyOS native底层操作文件问题 
993浏览  • 1回复 待解决
HarmonyOS  native层从C++到JS层传图片数据,过大失败 
1609浏览  • 1回复 待解决
HarmonyOS  web 使用javaScriptProxy添加js回调,使用指定name问题 
987浏览  • 1回复 待解决
ohos.telephony.data (蜂窝数据) data.isCellularDataEnabled方法返回数据有误 
1413浏览  • 1回复 待解决
HarmonyOS 使用socket发送数据频繁容易报2301004错误 
944浏览  • 1回复 待解决
如何解决底层库无法调试的问题? 
2313浏览  • 1回复 待解决





















如描述,当调用 writeStream.write(outData) 函数时,Node.js 会尝试将数据写入流,但不会等待写入操作完成就继续执行后面的代码。
在异步 write 的情况下,可能在数据完全写入之前就调用了 flush 或其他后续操作,导致保存的数据有误。而在同步 writeSync 的情况下,数据完全写入后才会继续执行后续的代码。
参考文档:
https://developer.huawei.com/consumer/cn/doc/harmonyos-references-V5/js-apis-file-fs-V5#writesync