http请求在使用的时候需要对通用部分进行封装,将url,请求类型,参数暴露给调用者就可以,下面就是网络请求的简单封装。

参看博客,大家可以看原作者的封装:HarmonyOS Next开发,使用Promise异步回调方式封装http请求_harmony next网络框架封装-CSDN博客

第一步,创建shredlibrary module

1、操作步骤:new->Module->Shared Library ->network,我是先创建了一个library的文件夹来管理这些动态库,至于为什么使用动态库,是因为多个地方引用,在同一个项目中只会有一份。

第二步,创建request.ets文件,封装网络请求。

1、封装请求参数

export interface RequestParams {
  url: string //请求地址
  method?: http.RequestMethod //请求方式
  extraData?: Object //请求额外数据
  headerContentType?: string //请求数据类型
}

 2、返回json格式封装

export default interface ResponseResult<T> {
  errorCode: number //错误码
  errorMsg: string //错误信息
  data: T //返回数据
}

3.1、提供请求接口


//参考博客:https://blog.csdn.net/Gusha_/article/details/140033069
export const request = async<T>(params: RequestParams): Promise<T> => {

  let httpRequest = http.createHttp();
  let requestUrl = params.url
  if (requestUrl.indexOf('http') == -1) {
    requestUrl = BaseUrl + requestUrl
  }

  let options: http.HttpRequestOptions = {
    method: params.method ?? http.RequestMethod.GET,
    header: {
      'Content-Type': params.headerContentType ?? 'application/json'
    },
    //POST请求传入的表单
    extraData: params.extraData ?? undefined,
    //指定服务端返回的数据类型,这里是字符串
    expectDataType: http.HttpDataType.STRING,
    // 可选,默认为true
    usingCache: true,
    // 可选,默认为1
    priority: 1,
    //可选,默认为60000ms
    connectTimeout: 60000,
    //可选,默认为60000ms
    readTimeout: 60000,
    // 可选,协议类型默认值由系统自动指定
    usingProtocol: http.HttpProtocol.HTTP1_1,
    // 可选,默认不使用网络代理,自API 10开始支持该属性
    usingProxy: false,
  }

  return new Promise(async (resolve, reject) => {
    httpRequest.request(
      requestUrl,//请求地址
      options,//请求配置和参数
      (err: BusinessError, data: http.HttpResponse) => {//请求回调

        ......
      })
  })
}

对外提供的这个接口接收用户传入的参数,创建HttpReques网络请求对象,配置请求参数,调用httpRequest.request(......)发起网络请求。 

3.2、解析服务端返回的json,返回解析对象给调用者。


//参考博客:https://blog.csdn.net/Gusha_/article/details/140033069
export const request = async<T>(params: RequestParams): Promise<T> => {

  ......

  return new Promise(async (resolve, reject) => {
    httpRequest.request(
      requestUrl,//请求地址
      options,//请求配置和参数
      (err: BusinessError, data: http.HttpResponse) => {//请求回调

        httpRequest.off('headersReceive');
        // 当该请求使用完毕时,调用destroy方法主动销毁
        httpRequest.destroy();

        //成功响应
        if (!err) {
          let result = `${data.result}`
          let responseResult: ResponseResult<T> = JSON.parse(result)
          console.info('httpRequest','result:' + result)
          console.info('httpRequest','code:' + responseResult.errorCode)
          console.info('httpRequest','msg:' + responseResult.errorMsg)

          //成功success
          if (responseResult.errorCode==0) {
            resolve(responseResult.data)

            //其他错误码
          }else {
            reject(result)
          }

          //响应失败
        }else {
          console.log('error:' + JSON.stringify(err))
          reject(err)
        }
      })
  })
}

4、Promise简单介绍

Promise是JavaScript中用于处理异步操作的一种对象,它可以代表一个异步操作的最终完成或失败,并可以链式调用,使得异步代码的编写更加清晰。在HarmonyOS中,我们可以使用Promise来处理http模块的异步回调。

具体使用可以参考博客:https://juejin.cn/post/7376894518330048547

gitee代码提交如下:WanHarmony: wanAndroid api 鸿蒙应用

Logo

讨论HarmonyOS开发技术,专注于API与组件、DevEco Studio、测试、元服务和应用上架分发等。

更多推荐