Создать httplink из AsyncStorage, Apollo, React Native

#javascript #react-native #apollo #react-apollo

#javascript #react-native #apollo #react-apollo

Вопрос:

«react-apollo»: «3.1.5»,

«react-native»: «https://github.com/expo/react-native/archive/sdk-38.0.2.tar.gz «

«expo»: «38.0.0»

Я пытаюсь получить свой URL-адрес из локального AsyncStorage (в основном по той причине, что мой URL-адрес выбирается из двух URL-адресов после входа в систему и присваивается AsyncStorage). Вот что я уже пробовал, но все время получаю неопределенные данные

 const asyncHttpLink = setContext(async (_, {headers, ...context}) => {
  const url = await getUrlFromAsyncStorage();
  return createHttpLink({
    uri: url ? url : '',
    ...context,
  });
});
  

затем я назначаю его в свой Appolo

 const client = new ApolloClient({
  ... other property as cache, type etc. ...
  link: ApolloLink.from([
    ... other links ...
    asyncHttpLink,
  ]),
});
  

в ответ я получаю все свойства, кроме данных, которые всегда не определены

 [
  "variables",
  "refetch",
  ... other 7 ...,
  "error",
  "called",
  "data", <== always undefined
  "client",
]
  

но если я использую стандартную createHttpLink, все начинает работать просто отлично

 const httpLink = createHttpLink({
  uri: desiredUrl,
});
  

кто-нибудь преследовал ту же ситуацию?

Ответ №1:

Я нашел решение:

 const customFetch = async (_: string, options: RequestInit) => {
  const url = await getUrlFromAsyncStorage();
  return url ? fetch(url, options) : fetch('');
};

const asyncHttpLink = createHttpLink({
  fetch: customFetch,
});