鸿蒙Next开发中多个请求如何设置同时执行

在鸿蒙Next开发中,遇到多个网络请求需要同时执行的场景,应该如何实现?比如需要并行请求多个接口数据,等所有请求完成后统一处理结果。目前尝试用Promise.all()但不太确定鸿蒙的API是否支持,或者是否有更优的方案?希望能提供具体的代码示例或最佳实践。

2 回复

鸿蒙Next里用TaskPoolWorker就能让多个请求一起跑!比如用TaskPool.execute()把任务扔进线程池,它们就会并发执行,像一群饿狼抢食一样快。记得处理回调,别让它们打起来!

更多关于鸿蒙Next开发中多个请求如何设置同时执行的实战系列教程也可以访问 https://www.itying.com/category-93-b0.html


在鸿蒙Next(HarmonyOS NEXT)开发中,可以通过 Promise.all()TaskPool 实现多个请求的同时执行(并发请求)。

1. 使用 Promise.all()

适用于网络请求等异步任务,通过 @ohos.net.http 模块发送请求。

import http from '@ohos.net.http';

async function concurrentRequests() {
  const request1 = http.createHttp();
  const request2 = http.createHttp();

  // 定义多个请求
  const promise1 = request1.request('https://api.example.com/data1');
  const promise2 = request2.request('https://api.example.com/data2');

  try {
    // 同时执行,等待所有请求完成
    const results = await Promise.all([promise1, promise2]);
    console.log('所有请求结果:', results);
  } catch (error) {
    console.error('请求失败:', error);
  }
}

2. 使用 TaskPool(CPU密集型任务)

适用于非I/O的并发计算任务,例如数据处理。

import taskpool from '@ohos.taskpool';

@Concurrent
function computeTask(data: number): number {
  // 模拟计算任务
  return data * 2;
}

async function runConcurrentTasks() {
  const tasks = [1, 2, 3].map(item => taskpool.execute(computeTask, item));
  
  try {
    const results = await Promise.all(tasks);
    console.log('并发计算结果:', results);
  } catch (error) {
    console.error('任务执行失败:', error);
  }
}

注意事项:

  • 网络请求:推荐用 Promise.all() 结合 http 模块。
  • CPU密集型任务:使用 TaskPool 避免阻塞主线程。
  • 错误处理:任一请求失败会导致 Promise.all() 整体失败,可用 Promise.allSettled() 替代。

根据实际场景选择合适方案即可实现并发执行。

回到顶部