#javascript #reactjs #axios
Вопрос:
function confirmPassword() {
let password = document.getElementById("password").value
let email = document.getElementById("email").value
Service.confirmPassword(email, password).then(response => {
res = response.data
setTwoFactorStep(1)
}).catch(err => {
alert(err.data.message)
})
alert(res)
}
После того, как запрос выполнен, response.data
не определен, в то время как я могу проверить свой браузер, он прошел успешно, и тело присутствует. Если я предупрежу response.data
внутри .then
, я получу Object object
OBS: var res
объявлен ранее, и метод Service.confirmPassword
является axios.post.
Комментарии:
1. какой тип данных вы ожидаете от api
2. Я ожидаю, что в теле появится JSON.
3. затем проанализируйте его ..
Ответ №1:
Код, который вы опубликовали, не синхронен, предупреждение сработает до того, как ваш http-запрос получит возможность разрешить, и, вероятно, поэтому вы получите неопределенное. если вы хотите что-то сделать с телом ответа, вам, вероятно, следует сделать это в обратном вызове «тогда».
function confirmPassword() {
let password = document.getElementById("password").value
let email = document.getElementById("email").value
// 1.your service call through axios gets triggered
Service.confirmPassword(email, password).then(response => {
// 3.this gets execute after the alert below once the http request has been resolved
res = response.data
setTwoFactorStep(1);
// invoke your handler here...
}).catch(err => {
alert(err.data.message)
})
alert(res) // 2.this gets executed next
}
если вы хотите записать это синхронным способом, рассмотрите возможность использования async/await
async function confirmPassword() {
let password = document.getElementById("password").value
let email = document.getElementById("email").value
const response = await Service.confirmPassword(email, password).catch(err => alert(err.data.message));
res = response.data;
setTwoFactorStep(1);
alert(res)