Как использовать Async Storage Axios - PullRequest
0 голосов
/ 11 октября 2019

Проблема:

У меня есть созданное по реакции приложение. И там я использую AsyncStorage с axios, как это, для обработки моих вызовов API. Вот как это выглядит.

import axios from "axios";
import { AsyncStorage } from "react-native";

// TODO: Replace this with actual JWT token from Keycloak
axios.defaults.headers.post["Content-Type"] = "application/json";

// Create axios instance for api calls
var instance = null;

export const setAuth = async () => {
  const user = await AsyncStorage.getItem("jwt");
  AsyncStorage.getItem("jwt").then(token => {
    instance = axios.create({
      baseURL: "",
      timeout: 150000,
      headers: {
        Authorization: "Bearer " + token,
        "Content-Type": "application/json"
      }
    });
    instance.interceptors.response.use(
      function(response) {
        return response;
      },
      async function(error) {
        if (error.response.status) {
          return error;
        }
      }
    );
  });
};

export const Get = (route, data) => {
  instance || setAuth();
  return instance.get(
    route,
    data == null ? { data: {} } : { data: JSON.stringify(data) }
  );
};

export const Post = (route, data) => {
  instance || setAuth();
  return instance.post(route, JSON.stringify(data));
};

export const Put = (route, data) => {
  debugger;
  instance || setAuth();
  return instance.put(route, JSON.stringify(data));
};

export const AddAdmin = (route, data) => {};

Из-за свойства asynchronus AsyncStorage оно не создает axios instanceinstance = axios.create({. Проблема в том, что после этой строки. Так что кто-то может мне помочь с этим. У меня нет никакой идеи, чтобы выяснить, чтонеправильно с этим. Спасибо.

1 Ответ

1 голос
/ 11 октября 2019

Вы можете попробовать это.

export const setAuth = async () => {
  const token = await AsyncStorage.getItem('jwt');
  instance = axios.create({
    baseURL: '',
    timeout: 150000,
    headers: {
      Authorization: 'Bearer ' + token,
      'Content-Type': 'application/json'
    }
  });
   // remaining Code
};

export const Get = (route, data) => {
  function getData(){
     return instance.get(
      route,
      data == null ? { data: {} } : { data: JSON.stringify(data) }
    )
  }
  if(instance) return getData()
  return setAuth().then(getData)
}
...