Функция для отправки запроса к серверу
Оптимизирую свое приложение, в файле для описания всех запросов к серверу написала вот такую функцию
mainReques = async (url, method, body) => {
try {
const getAuthFlag = () => {
if (this.token) {
return { 'Content-Type': 'application/json;charset=utf-8', Authorization: `Token ${getToken()}` };
}
return { 'Content-Type': 'application/json;charset=utf-8' };
};
const request = await fetch(url, {
method,
headers: getAuthFlag(),
body: JSON.stringify(body),
});
const resp = await request.json();
return resp;
} catch {
throw new Error();
}
};
Использую ее при попытке авторизации:
authentication = (email, pass) => {
try {
const body = {
user: {
email,
password: pass,
},
};
this.mainRequest(`${какой-то url}`, 'POST', body);
} catch {
throw new Error();
}
};
В компоненте вызываю так:
const onSubmit = (data) => {
ApiServices.authentication(data.email, data.password)
.then((resp) => {
getUserData(resp.user.username, resp.user.image); // сохраняю данные пользователя в стор
auth(true); // меняю флаг авторизации
saveToken(resp.user.token); // сохраняю токен пользователя
})
.catch(() => message.warning('Enter login and password'));
};
Мне кажется такой код логичным, но при авторизации в браузере выскакивает вот такая ошибка :
Насколько я понимаю, ошибка происходит на уровне запроса. Вопрос в том, как ее исправить?
Ответы (1 шт):
Автор решения: Константин Рыбаков
→ Ссылка
Чтобы authentication заработала так как вы хотите, она должна вернуть Promise. Попробуйте добавить слово async перед объявлением функции authentication. Таким образом функция неявно вернет Promise
const authentication = async (...args) => /*so stuff*/
Или явно создайте Promise и верните его:
const authentication = (...args) => {
return new Promise((resolve, reject)=>{
// do stuff
if (all_is_good)
resolve(result)
else
reject("something bad")
})
}
Обратите внимание, что при явном возвращении Promise функция объявляется без async.
