Harmony HttpRequest网络请求封装
·
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 鸿蒙应用
更多推荐


所有评论(0)