鸿蒙Next中http.on('datareceive',(data : arraybuffer))方法不执行是什么原因

在鸿蒙Next开发中,我调用了http.on(‘datareceive’, (data: arraybuffer))方法监听数据接收事件,但发现回调函数始终不执行。请求已成功发送,服务器也能正常返回数据,但就是无法触发datareceive事件。请问可能是什么原因导致的?是否需要在请求前配置特定参数,或者这个事件在某些网络环境下不支持?

2 回复

哈哈,程序员老哥,你的问题让我想起自己debug的“美好时光”!可能原因有:

  1. 网络请求根本没发出去(先检查请求成功了吗?)
  2. 事件名拼写错了(是dataReceive不是datareceive)
  3. 回调函数注册时机不对(在请求前就要监听!)
  4. ArrayBuffer处理方式有问题

建议:先打个console.log(“我活着吗?”),看看是不是根本没进这个回调~

更多关于鸿蒙Next中http.on('datareceive',(data : arraybuffer))方法不执行是什么原因的实战系列教程也可以访问 https://www.itying.com/category-93-b0.html


在鸿蒙Next中,http.on('datareceive', (data: ArrayBuffer)) 方法不执行可能有以下原因及解决方案:

  1. 网络请求未正确发送

    • 确保已调用 http.request() 发送请求,且未遗漏 http.on('headerReceive') 等必要事件监听。
    • 示例代码:
      import http from '@ohos.net.http';
      
      let httpRequest = http.createHttp();
      httpRequest.on('headerReceive', (header) => {
        console.info('Received header:', header);
      });
      httpRequest.on('dataReceive', (data: ArrayBuffer) => {
        console.info('Received data:', data);
      });
      httpRequest.request("https://example.com", { method: http.RequestMethod.GET });
      
  2. 事件监听顺序问题

    • 必须在调用 request() 前注册 dataReceive 事件监听,否则可能错过数据回调。
  3. 数据未分片或响应为空

    • 若服务器返回数据量小或为空,可能直接通过 headerReceive 或请求完成回调返回,而非触发 dataReceive。检查响应内容是否分片传输。
  4. 权限配置缺失

    • module.json5 中配置网络权限:
      {
        "module": {
          "requestPermissions": [
            {
              "name": "ohos.permission.INTERNET"
            }
          ]
        }
      }
      
  5. 回调函数错误处理

    • 检查回调函数逻辑,避免因异常导致静默失败。添加 try-catch 捕获错误:
      httpRequest.on('dataReceive', (data: ArrayBuffer) => {
        try {
          // 处理数据逻辑
        } catch (err) {
          console.error('Data processing error:', err);
        }
      });
      
  6. 使用替代方案

    • 若仍不生效,改用 httpRequest.request()Promise 形式直接获取响应:
      httpRequest.request("https://example.com", { method: http.RequestMethod.GET })
        .then((response) => {
          console.info('Response data:', response.result);
        })
        .catch((err) => {
          console.error('Request failed:', err);
        });
      

排查步骤

  1. 确认网络请求成功(检查 headerReceive 或完成回调)。
  2. 验证事件监听在请求前注册。
  3. 检查服务器是否返回分片数据。
  4. 使用调试工具(如Console)输出日志定位问题。

通过以上调整,通常可解决 dataReceive 未触发的问题。

回到顶部