как вернуть ответ сервера от axios

#async-await #axios

Вопрос:

Я просмотрел некоторые другие сообщения об этом, и, похоже, мне нужно применить «ожидание», я просто не уверен, как изменить следующее, чтобы сделать это

 function sendData(url,emailPass){

    let bodyFormData = new FormData()
    for (const [key, value] of Object.entries(emailPass)) {
        console.log(key,value)
        bodyFormData.append(key,value)
    }

        
    axios({
        method: 'POST',
        url: url,
        data: bodyFormData,
        headers: {'Content-Type': 'multipart/form-data'}
    })
        .then(function (response){
            return response.data

        })
        .catch(function(response){
            return response
        })

}
 

Ответ №1:

Вы должны изменить функцию, чтобы вернуть обещание от axios, которое возвращает данные ответа.

 function sendData(url,emailPass){

    let bodyFormData = new FormData()
    for (const [key, value] of Object.entries(emailPass)) {
        console.log(key,value)
        bodyFormData.append(key,value)
    }

        
    return axios({
        method: 'POST',
        url: url,
        data: bodyFormData,
        headers: {'Content-Type': 'multipart/form-data'}
    })
        .then(function (response){
            return response.data

        })
        .catch(function(response){
            return response
        })

}
 

Если вы хотите использовать асинхронное/ожидание, вы можете сделать

 async function sendData(url,emailPass){

    let bodyFormData = new FormData()
    for (const [key, value] of Object.entries(emailPass)) {
        console.log(key,value)
        bodyFormData.append(key,value)
    }
    
    try{
        const response = await axios({
            method: 'POST',
            url: url,
            data: bodyFormData,
            headers: {'Content-Type': 'multipart/form-data'}
        });
        return response.data;
    }catch(e){
        return e.response.data;   
    }
}
 

Комментарии:

1. ваш первый метод на самом деле не работает. Когда я пытаюсь это сделать, я получаю следующее: Обещаю {<в ожидании>} axios.js:20 <в ожидании><предварительно>{«formEmail»:»abc@gmail.com»,»formPassword»:»compas»}<предварительно></предварительно></предварительно><предварительно>Массив ( ) <предварительно></предварительно></предварительно><предварительно>[{«пользователь»:»НЕ НАЙДЕН»}]<предварительно></предварительно> обещание-это то, что возвращается из инструкции return фактическим ответом. данные поступают из console.log() непосредственно перед возвратом. Я хочу вернуть объект js

2. ваш второй метод тоже не работает, так как он разрушает мой блок catch

3. Первый зависит от того, как вы вызываете эту функцию. Если вы этого не сделаете .тогда() это произойдет. Я отредактировал второй, чтобы продемонстрировать, как использовать блок try/catch.