Я решил поместить все свои вызовы API в отдельный файл, и все они не сохраняют состояния.
const get = endPoint => {
let token = "c8c17003468314909737ae7eccd83d4b6eecb792"; //I have put this token here manually
return fetch(endPoint, {
method: "GET",
headers: {
Accept: "application/json",
"Content-Type": "application/json",
Authorization: "Token " + token
}
}).then(response => response.json());
};
и в том же файле у меня есть фактические вызовы API. Пример выглядит следующим образом.
export const loadGroups = () => {
const endPoint = "https://xxxx.com/api/groups/";
return get(endPoint);
};
Это прекрасно работает, когда я вызываю API из различных компонентов следующим образом.
import { loadGroups } from "../../api";
componentDidMount() {
loadGroups()
.then(responseJson => {
this.setState({
groups: responseJson
});
})
.catch(error => {
console.error(error);
});
}
Однако я хочу использовать AsyncStorage для извлечения сохраненного токена, и его надлежащая природа - вернуть обещание. Это хорошо работает, когда я пишу функции получения токена и сохранения его в SetState в каждом компоненте, для которого я выполняю вызовы. Я действительно хочу реорганизовать код, и использование избыточности - это боль для меня.
Пока я написал файл для получения токена, и он возвращает обещание.
import { AsyncStorage, Text } from "react-native";
const MyToken = async () => {
try {
const retrievedItem = await AsyncStorage.getItem("userToken");
const item = JSON.parse(retrievedItem);
return item;
} catch (error) {
return null;
}
};
export default MyToken;
И в файле API я переписал приведенный выше код в
const get = endPoint => {
MyToken().then(token => {
console.log(token, "try 1"); //this works
const lookupOptions = {
method: "GET",
headers: {
Accept: "application/json",
"Content-Type": "application/json",
Authorization: "Token " + token
}
};
return fetch(endPoint, lookupOptions).then(response => {
console.log(response.json(), "promise response,json");
response.json();
});
});
};
Однако всякий раз, когда я вызываю функцию loadGroups (). Then () (как в первом примере) в любом компоненте, я получаю сообщение об ошибке, что loadGroups.then () не может быть решена
Есть ли способ решить эту проблему без учета состояния, избыточности, mobx, если я хочу, чтобы мой код API выполнялся в функциях без сохранения состояния в отдельных модулях.