HarmonyOS 鸿蒙Next 关于http请求使用promise异步 数据回调的问题

发布于 1周前 作者 songsunli 来自 鸿蒙OS

HarmonyOS 鸿蒙Next 关于http请求使用promise异步 数据回调的问题

先看代码(以下是定义了一个getDatas(),模拟的一个网络请求事件):

getDatas(){
  let httpRequest = http.createHttp();
  let promise = httpRequest.request("EXAMPLE_URL", {
    method: http.RequestMethod.GET,
    connectTimeout: 60000,
    readTimeout: 60000,
    header: {}
  });
  promise.then((data: http.HttpResponse) => {
    console.info('Result:' + data.result);

  }).catch((err: Error) => {

    console.info('error:' + JSON.stringify(err));
  });
}

在其它页面调用getDatas方法,想要得到返回数据data或者err,怎么实现?


更多关于HarmonyOS 鸿蒙Next 关于http请求使用promise异步 数据回调的问题的实战系列教程也可以访问 https://www.itying.com/category-93-b0.html

8 回复

可以参考下:

import http from '@ohos.net.http';
import {MyData} from '../model/MyData'
import { BusinessError } from '@kit.BasicServicesKit';

export default async function getDatas(): Promise<MyData[]> {
  let dataList: MyData[] = []

  let httpRequest = http.createHttp();
  let response = httpRequest.request(
    // 填写HTTP请求的URL地址,可以带参数也可以不带参数。URL地址需要开发者自定义。请求的参数可以在extraData中指定
    "http://xxxxx",
    {
      method: http.RequestMethod.GET, // 可选,默认为http.RequestMethod.GET
      // 开发者根据自身业务需要添加header字段
      header: {
        'Content-Type': 'application/json'
      },
      expectDataType: http.HttpDataType.STRING, // 可选,指定返回数据的类型
    }
  );
  // 使用await和async,等待请求完成处理数据后返回
  await response.then((data) => {
    if (data.responseCode == 200) {
      // 处理返回结果
      const response = data.result + "";
      const res: MyData[] = JSON.parse(response).data as MyData[]
      for (let i = 0; i < res.length; i++) {
        let item = res[i];
        dataList.push({
          id: item.id, name: item.name, createTime: item.createTime
        });
      }
    } else {
      // todo 请求失败,进行失败逻辑处理
    }
  }).catch((err: BusinessError) => {
    // todo 请求失败,进行失败逻辑处理
    console.info('error:' + JSON.stringify(err));
  })
  return dataList;
}

更多关于HarmonyOS 鸿蒙Next 关于http请求使用promise异步 数据回调的问题的实战系列教程也可以访问 https://www.itying.com/category-93-b0.html


嗯  满足预期!

想要的效果类似这种,返回当前请求的data,在ui页面直接获取response。

cke_3556.png

getDatas() {

let httpRequest = http.createHttp();

let promise = httpRequest.request(“EXAMPLE_URL”, {

method: http.RequestMethod.GET,

connectTimeout: 60000,

readTimeout: 60000,

header: {}

});

return promise;

}

把promise返回就行了,调用处:

getDatas().then((data: http.HttpResponse) => { console.info('Result:' + data.result); }).catch((err: Error) => { console.info('error:' + JSON.stringify(err)); });

我知道这种写法,我不愿意直接返回promise到UI页面(通用判断在请求时全局处理,返回data在UI页处理)。

比如在console.info('Result:' + data.result);这个位置返回data,

啥叫不愿意返回promise?是想要go那种result的err一起返回?

项目名称

  • 项目状态:进行中
  • 项目周期:2023-01-01 到 2023-12-31

项目描述

这是项目的详细描述。

团队成员

  • 成员A
  • 成员B
  • 成员C

联系方式

  • 邮箱:example@example.com
  • 电话:1234567890

在HarmonyOS鸿蒙Next系统中,关于HTTP请求使用Promise进行异步数据回调的问题,可以通过以下方式进行处理:

HarmonyOS提供了丰富的网络请求API,通常这些API是支持异步操作的。要使用Promise来处理HTTP请求的异步回调,你需要:

  1. 创建Promise对象:在发起HTTP请求前,创建一个Promise对象,该对象将管理请求的成功和失败状态。

  2. 发起HTTP请求:使用鸿蒙系统提供的网络请求接口(如fetch或类似的封装函数)发起请求,并在请求成功或失败时分别解析或拒绝Promise。

  3. 处理Promise结果:通过.then().catch()方法处理Promise的成功和失败回调,分别处理HTTP请求成功返回的数据或请求失败的错误信息。

  4. 数据回调:在.then()方法内部处理返回的数据,执行相应的业务逻辑。

示例代码(伪代码):

function fetchData(url) {
    return new Promise((resolve, reject) => {
        // 发起HTTP请求
        fetch(url)
            .then(response => response.json())
            .then(data => resolve(data))
            .catch(error => reject(error));
    });
}

// 使用fetchData函数并处理结果
fetchData('your-url-here')
    .then(data => {
        // 处理成功的数据
    })
    .catch(error => {
        // 处理请求错误
    });

如果问题依旧没法解决请联系官网客服,官网地址是 https://www.itying.com/category-93-b0.html

回到顶部