请求成功时axios响应数据未定义

时间:2021-07-02 20:09:00

标签: 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 个答案:

答案 0 :(得分:1)

您发布的代码不是同步的 警报将在您的 http 请求有机会解决之前触发,这可能是您获得未定义的原因。如果您想对响应正文执行任何操作,您可能应该在“then”回调中执行此操作。

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)