如何使用RXjs缓存请求?

如何使用RXjs缓存请求?,rxjs,rxjs5,rxjs6,Rxjs,Rxjs5,Rxjs6,情况如下: 有一段文字。每次文本更改,我都会提交一个请求。 答复文本分为几个部分。 然后我再次将每个部分发送到服务器 例如: 请求-响应 1234567=>[1]、[2]、[3,4]、[5,6,7] 请求队列 [1]=>[2]=>[3,4]=>[5,6,7] 更改文本 请求-响应 12334567=>[1]、[2]、[3,3,4]、[5,6,7] 在这里,我想比较上一个答案和新的,只发送 [3,3,4] 我决定将其全部作为流,并最终处理RxJS。 实际上,在寻找RxJS方式时,我会在这里提出一个

情况如下: 有一段文字。每次文本更改,我都会提交一个请求。 答复文本分为几个部分。 然后我再次将每个部分发送到服务器

例如:

请求-响应 1234567=>[1]、[2]、[3,4]、[5,6,7] 请求队列 [1]=>[2]=>[3,4]=>[5,6,7]

更改文本

请求-响应 12334567=>[1]、[2]、[3,3,4]、[5,6,7]

在这里,我想比较上一个答案和新的,只发送 [3,3,4]

我决定将其全部作为流,并最终处理RxJS。
实际上,在寻找RxJS方式时,我会在这里提出一个替代方案。不缓存响应数组,而是缓存使用拦截器发出的HTTP请求的响应。简单的映射将是缓存的良好选择。如果您使用的是Angular,请参见下面的代码,它提供了开箱即用的截取

例如,如果您对[1]发出HTTP请求,请将其保存在缓存中

intercept(req: HttpRequest<any>, next: HttpHandler) {

   const response = this.cache.get(req); // get the cached response object.

   return response? Observable.of(response) : makeHttpRequest(req,next)
}

makeRequest(req, next){
 //make http request and save it in cache as well,
 const response = httpREquest();
 this.cache.put(req, response);
}
intercept(请求:HttpRequest,下一步:HttpHandler){
const response=this.cache.get(req);//获取缓存的响应对象。
返回响应?可观察的(响应):makeHttpRequest(请求,下一个)
}
makeRequest(请求,下一个){
//发出http请求并将其保存在缓存中,
const response=httpREquest();
this.cache.put(请求,响应);
}

根据您的示例,当请求[3,3,4]时,在缓存中找不到输出,请发出http请求并保存它。这样可以避免数组比较。

您是否可以添加到目前为止尝试过的实现示例代码?是否使用Angular?我编写了一个库,用于使用RxJs可观察对象处理应用程序状态。