HarmonyOS 关于rcp.createSession封装

我这边想要封装rcp

但是在文档看,rcp这个没有实例化方法呢?

我这边该如何封装?

不能所有地方都这么写吧

const cache = new ResponseCache();
const session = rcp.createSession({
  interceptors: [new ResponseCachingInterceptor(cache)]
});
return  session.post("https:", MapUtils.map2Json(requestDic123)).then((response) => {
  console.info(`Response succeeded: ${response}`);
}).catch((err: BusinessError) => {
  console.error(`Err: Code is ${err.code}, message is ${err.message}`);
});
HarmonyOS
1天前
浏览
收藏 0
回答 1
待解决
回答 1
按赞同
/
按时间
FengTianYa

建议将rcp相关配置和方法封装进一个class中,使用时直接new一个实例对象,并调用其中相关的方法

class ResponseCache {
  private readonly cache: Record<string, rcp.Response> = {};

  getResponse(url: string): rcp.Response {
    return this.cache[url];
  }

  setResponse(url: string, response: rcp.Response): void {
    this.cache[url] = response;
  }
}

class ResponseCachingInterceptor implements rcp.Interceptor {
  private readonly cache: ResponseCache;

  constructor(cache: ResponseCache) {
    this.cache = cache;
  }

  async intercept(context: rcp.RequestContext, next: rcp.RequestHandler): Promise<rcp.Response> {
    const url = context.request.url.href;
    const responseFromCache = this.cache.getResponse(url);
    if (responseFromCache) {
      return Promise.resolve(responseFromCache);
    }
    const promise = next.handle(context);
    promise.then((resp) => {
      resp.statusCode;
      this.cache.setResponse(url, resp);
    });
    return promise;
  }
}

class RcpClass {
  cache:ResponseCache  = new ResponseCache();
  session = rcp.createSession({
    interceptors: [new ResponseCachingInterceptor(this.cache)]
  });

  url?: string
  content?: rcp.RequestContent
  constructor(url:string,content: rcp.RequestContent) {
    this.url = url;
    this.content = content
  }

  post(){
    this.session.post(this.url, this.content).then((response) => {
      console.info(`Response succeeded: ${response}`);
      return
    }).catch((err: BusinessError) => {
      console.error(`Err: Code is ${err.code}, message is ${err.message}`);
      return
    });
  }

  // 继续封装其他方法 get、fetch、put等
}

也可以参考一下文档中的testInterceptor方法,直接封装成函数(需要自己添加url等参数)

https://developer.huawei.com/consumer/cn/doc/harmonyos-guides-V5/remote-communication-interceptor-V5

分享
微博
QQ
微信
回复
1天前
相关问题
HarmonyOS 关于rcp请求封装问题
97浏览 • 1回复 待解决
HarmonyOS rcp通用请求的Promise封装
90浏览 • 1回复 待解决
HarmonyOS 关于页面架构封装问题
93浏览 • 1回复 待解决
HarmonyOS 关于自定义弹窗的封装调用
462浏览 • 2回复 待解决
HarmonyOS rcp请求问题
92浏览 • 1回复 待解决
HarmonyOS rcp能力调用demo
54浏览 • 1回复 待解决
HarmonyOS axios和rcp取舍
33浏览 • 1回复 待解决
HarmonyOS rcp取消网络请求
78浏览 • 1回复 待解决
HarmonyOS rcp模块使用例子
52浏览 • 1回复 待解决
HarmonyOS RCP如何设置contentType
36浏览 • 1回复 待解决
HarmonyOS rcp拦截器
80浏览 • 1回复 待解决
HarmonyOS http/rcp有cookieManager吗
57浏览 • 1回复 待解决
HarmonyOS rcp网络请求报错1007900994
48浏览 • 1回复 待解决
HarmonyOS RCP POST表单提交咨询
41浏览 • 1回复 待解决
HarmonyOS rcp请求拦截器
579浏览 • 1回复 待解决