Как я кеширую запросы, используя RXjs? - PullRequest
0 голосов
/ 14 октября 2019

Ситуация следующая: текст есть. Каждый текст меняется, и я отправляю запрос. Текст ответа делится на части. Затем я снова отправляю каждую часть на сервер.

Пример:

Запрос - Ответ 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 способ

1 Ответ

0 голосов
/ 14 октября 2019

Я предложу альтернативу здесь. Вместо того, чтобы кэшировать массив ответов, кэшируйте ответ HTTP-запроса, который вы делаете, используя Interceptor . Простая карта будет хорошим выбором для кеша. Если вы используете Angular, посмотрите код ниже, он предоставляет Intercepts из коробки.

Если вы делаете HTTP-запрос для [1] , например, сохраните его в кеше

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);
}

Из вашего примера, когда сделан запрос на [3,3,4] , в кеше нет вывода, создайте запрос http и сохраните его. Таким образом вы избежите сравнения массивов.

...