2016-04-18 44 views
6

Mam ustawiony axios.defaults.timeout = 1000;funkcja Timeout w bibliotece Axios nie działa

zatrzymałem serwer, który zapewnia mi API.

Jednak upłynięcie limitu czasu po wysłaniu żądania trwa dłużej niż 1s.

To jak wygląda moja prośba:

import axios from 'axios'; 
axios.defaults.timeout = 1000; 

return axios.post(`${ROOT_URL}/login/${role}`, creds).then((response) => { 
     console.log(response); 

     if(response.status === 200) { 
      // If login was successful, set the token in local storage 
      localStorage.setItem(`${role}_log_toks`, JSON.stringify(response.data)); 

      // Dispatch the success action 
      dispatch(receiveLogin(response.data)); 

      return response; 
     } 
     }).catch(err => { 
     console.log(err); 
     // If there was a problem, we want to 
     // dispatch the error condition 
     if(err.data && err.status === 404) { 
      dispatch(loginError(err.data)); 
     } else { 
      dispatch(loginError('Please check your network connection and try again.')); 
     } 

     return err; 
     }); 

Próbowałem również:

return axios.post(`${ROOT_URL}/login/${role}`, creds, {timeout: 1000}).then... 

Axios nie kończy pobierania i po 5 - 10 minutach wreszcie pokazuje błąd sieciowy. Rozumiem, że istnieją inne techniki radzenia sobie z limitem czasu, ale dlaczego funkcja timeout w aksjomatach nie działa? Jaki może być powód, dla którego aksios nie przestaje przyciągać?

Axios version 0.9.1

EDIT: Jak wspomniano w komentarzach, próbowałem też:

import axios from 'axios'; 

const httpClient = axios.create(); 

httpClient.defaults.timeout = 500; 

return httpClient.post(`${ROOT_URL}/login/${role}`, creds) 
    .then(handleResponse) 

Odpowiedz

2

Musisz utworzyć instancję klienta Axios http:

const httpClient = axios.create(); 
httpClient.defaults.timeout = 500; 

Możesz następnie użyć httpClient w następujący sposób:

return axios.post(`${ROOT_URL}/login/${role}`, creds) 
    .then(handleResponse) 

Na marginesie można również ustawić podstawowy adres URL w tej samej konfiguracji zamiast korzystania ${ROOT_URL}:

httpClient.defaults.baseURL = ROOT_URL 
+0

1. Myślę, że chcesz powrotu httpClient.post ('$ {root_url}/login/$ {rola} ', creds) 2. Wypróbowałem to również. Nie działa. 3. Obecnie używam techniki wspomnianej przez mislav tutaj: https://github.com/github/fetch/issues/175 Działa jak urok, ale chciałem, aby czas oczekiwania dostarczony przez Axios do pracy. –

+0

Nie jestem pewien, dlaczego to nie działa. Jakiej wersji "axios" używasz? Czy możesz zawrzeć w swoim kodzie instrukcje 'require' /' import' i kod inicjujący axios? – Clarkie

+0

Dodałem twoje sugestie. –