Axios множественный запрос на перехватчик - PullRequest
0 голосов
/ 17 января 2019

Я использую библиотеку axios в своем приложении реакции.
У меня проблема с перехватчиком.

Мой вопрос, скажем, у меня три запроса происходят одновременно, и у меня нет токена, перехватчик вызывает три раза getUserRandomToken, я хочу, чтобы перехватчик дождался получения токена из первого запроса и затем продолжил другим.

Постскриптум токен у него с датой истечения срока действия, поэтому я также проверяю его, и если срок действия недействителен, мне нужно создать новый токен.

Это перехватчик:

axios.interceptors.request.use(
  config => {
    /*I'm getting the token from the local storage
    If there is any add it to the header for each request*/
    if (tokenExist()) {
      config.headers.common["token"] = "...";
      return config;
    }
    /*If there is no token i need to generate it
     every time create a random token, this is a axios get request*/
    getUserRandomToken()
      .then(res => {
        /*add the token to the header*/
        config.headers.common["token"] = res;
        return config;
      })
      .catch(err => {
        console.log(err);
      });
  },
  function(error) {
    // Do something with request error
    return Promise.reject(error);
  }
);

1 Ответ

0 голосов
/ 17 января 2019

Как насчет одноэлементного объекта, который будет обрабатывать поколения токенов? что-то похожее на это:

const tokenGenerator ={
  getTokenPromise: null,
  token: null,
  getToken(){
    if (!this.getTokenPromise){
      this.getTokenPromise = new Promise(resolve=>{
        /*supposed to be a http request*/
        if (!this.token){
          setTimeout(()=>{
            this.token = 'generated';
            resolve(this.token);
          },0)
        }else{
          resolve(this.token);
        }
      })
    }
    return this.getTokenPromise;
  }

Вы можете ссылаться на этот же объект из перехватчиков.

см. Пример: JS FIddle ссылка: ссылка

...