Чтобы сделать мой код React Native более структурированным, в моем последнем проекте я решил создать класс, который будет содержать все запросы на выборку. Структура класса показана ниже:
import { AsyncStorage } from 'react-native';
// const API_URL = 'http://localhost:5500';
const API_URL = 'https://trail-api.herokuapp.com';
export default class Backend {
static logIn(username, password){
fetch(`${API_URL}/users/login`, {
method: 'POST',
headers: {
Accept: 'application/json'
},
body: {
username: username,
password: password
}
});
}
static signUp(firstname, lastname, username, email, password){
fetch(`${API_URL}/users/register`, {
method: 'POST',
headers: {
Accept: 'application/json'
},
body: {
firstname: firstname,
lastname: lastname,
username: username,
email: email,
password: password,
confirmpassword: password
}
});
}
static getUser(){
AsyncStorage.getItem('@Trail:user');
}
static getFeed(username){
fetch(`${API_URL}/user/${username}/feed`);
}
static logOut(user){
AsyncStorage.removeItem('@Trail:user');
}
static followUser(user, username){
fetch(`${API_URL}/users/${username}/follow`, {
method: 'POST',
headers: {
Accept: 'application/json'
}
});
}
static createPost(user, text, longitude, latitude){
fetch(`${API_URL}/posts/new`, {
method: 'POST',
headers: {
Accept: 'application/json'
},
user: user,
body: {
text: text,
location: {
longitude: longitude,
latitude: latitude
}
}
});
}
static likePost(user, id){
fetch(`${API_URL}/posts/${id}/like`, {
method: 'POST',
headers: {
Accept: 'application/json'
},
user: user,
params: {
id: id
}
});
}
static unlikePost(user, id){
fetch(`${API_URL}/posts/${id}/unlike`, {
method: 'POST',
headers: {
Accept: 'application/json'
},
user: user
});
}
static getComments(id){
fetch(`${API_URL}/posts/${id}/comments`, {
method: 'GET',
headers: {
Accept: 'application/json'
}
});
}
}
Я ожидал, что код сработает, если я назову его так, как будто это какой-то компонент:
async login(){
const { username, password } = this.state;
await Backend.logIn(username, password)
.then((response) => response.json())
.then((responseJSON) => AsyncStorage.setItem('@Trail:user',
JSON.stringify(responseJSON.user)));
() => navigate('Home');
}
Но вместо этого выдается ошибка отклонения обещания. Что мне не хватает? ОБНОВЛЕНИЕ: пожалуйста, посмотрите на изображение ниже, чтобы узнать об ошибке:
Кстати, вы, вероятно, получаете эту ошибку, потому что ваши статические методы класса Backend на самом деле не возвращают Promises, поэтому await выдает исключение
@AlexandreWiechersVaz выглядит так, как будто они это делают из кода.



![Безумие обратных вызовов в javascript [JS]](https://i.imgur.com/WsjO6zJb.png)


Не могли бы вы попробовать вернуть выборку (чтобы потом можно было поймать обещание) вот так:
static logIn(username, password){
return fetch(`${API_URL}/users/login`, {
method: 'POST',
headers: {
Accept: 'application/json'
},
body: {
username: username,
password: password
}
});
}
Какую ошибку вы получаете на самом деле? Трассировки стека?