2014-11-13 2 views
1

В угловом $http.get(url, {cache:true}) будет прекрасно кэшировать ответы сервера. Но что делает кеш, когда запрос GET на сервер выходит из строя? Это может быть временная проблема с соединением или ответ сервера как тайм-аут.

Предположим, что я обрабатываю ошибку и отображаю кнопку повтора, будет ли последующий вызов $http.get(url, {cache:true}) повторить попытку сервера или это даст мне неудачное обещание из кеша?

ответ

3

Если к одному и тому же URL-адресу GET выполняется несколько запросов, кэш будет вызывать только один запрос. Цитирование документации:

Если есть несколько запросов GET для того же URL, который должен быть в кэше, используя тот же кэш, но кэш еще не заполнен, только один запрос к серверу будет сделано, а остальные запросы будет выполняться с использованием ответа от первого запроса.

Однако, если этот запрос возвращает, если код состояния не увенчался успехом, он не будет кэшироваться (он будет удален из кеша).

Мы можем увидеть это в исходном коде:

/** 
    * Callback registered to $httpBackend(): 
    * - caches the response if desired 
    * - resolves the raw $http promise 
    * - calls $apply 
    */ 
    function done(status, response, headersString, statusText) { 
    if (cache) { 
     if (isSuccess(status)) { 
     cache.put(url, [status, response, parseHeaders(headersString), statusText]); 
     } else { 
     // remove promise from the cache 
     cache.remove(url); 
     } 
    } 

Так короче - Угловая не кэшируются «не удалось» запросы - это: запросы с кодом состояния неуспеха.

+0

Очень полезно, спасибо! – Jaap

Смежные вопросы