J'essaye d'obtenir un objet JSON de axios
'use strict'
async function getData() {
try {
var ip = location.Host;
await axios({
url: http() + ip + '/getData',
method: 'POST',
timeout: 8000,
headers: {
'Content-Type': 'application/json',
}
}).then(function (res) {
console.dir(res); // we are good here, the res has the JSON data
return res;
}).catch(function (err) {
console.error(err);
})
}
catch (err) {
console.error(err);
}
}
Maintenant, je dois récupérer le res
let dataObj;
getData().then(function (result) {
console.dir(result); // Ooops, the result is undefined
dataObj = result;
});
Le code bloque et attend le résultat, mais je suis indéfini au lieu d'objet
Cela semble être l'un de ces cas où async/await
ne vous achète pas beaucoup. Vous devez toujours renvoyer un résultat de la fonction asynchrone, qui renverra une promesse à l'appelant. Vous pouvez le faire avec quelque chose comme:
async function getData() {
try {
let res = await axios({
url: 'https://jsonplaceholder.typicode.com/posts/1',
method: 'get',
timeout: 8000,
headers: {
'Content-Type': 'application/json',
}
})
if(res.status == 200){
// test for status you want, etc
console.log(res.status)
}
// Don't forget to return something
return res.data
}
catch (err) {
console.error(err);
}
}
getData()
.then(res => console.log(res))
<script src="https://cdnjs.cloudflare.com/ajax/libs/axios/0.18.0/axios.js"></script>
Mais dans cet exemple, comme vous n'avez pas besoin de faire grand-chose dans la fonction réelle avec le résultat, vous feriez probablement mieux de simplement retourner la promesse d'Axios:
function getDataPromise() {
return axios({
url: 'https://jsonplaceholder.typicode.com/posts/1',
method: 'get',
timeout: 8000,
headers: {
'Content-Type': 'application/json',
}
})
.then(res => res.data)
.catch (err => console.error(err))
}
getDataPromise()
.then(res => console.log(res))
<script src="https://cdnjs.cloudflare.com/ajax/libs/axios/0.18.0/axios.js"></script>