2017-10-20 11 views
0

J'utilise une fonction qui utilise axios. Je veux être capable d'appeler cette fonction et d'obtenir le tableau que j'essaie de retourner. Malheureusement je reviens indéfini. Je ne sais pas si je suis juste en train de me tromper ou si ça a à voir avec les axios prenant le temps de faire un appel api.Fonction Axios ne renvoyant aucune valeur avec js

Voici mon code:

const filterItemsByRadius = (userRadius, items) => { 
    axios 
    .get('http://ip-api.com/json') 
    .then(response => { 
     const data = []; 

     const { lat, lon } = response.data; 
     items.map(item => { 
     let itemGeolocation; 
     if (item.geolocation) { 
      itemGeolocation = item.geolocation.coords; 
     } 

     const currentLocation = { 
      latitude: lat, 
      longitude: lon, 
     }; 
     const distanceArr = geolib.orderByDistance(currentLocation, [itemGeolocation]); 
     const miles = (distanceArr[0].distance/1609.34).toFixed(2); 
     if (miles <= userRadius) { 
      data.push(item); 
      return data; 
     } 
     }); 
    }) 
    .catch(err => { 
     console.log(err); 
    }); 
}; 

Si j'appelle cette fonction comme si et LOGGUE sur:

console.log(filterItemsByRadius(userRadius, items)); 

Alors je vais obtenir non défini. J'ai déconnecté les données que je retourne et c'est un tableau avec les informations correctes, donc je dois faire quelque chose de mal avec la façon dont je le retourne.

Répondre

2

La fonction renvoie une promesse. Vous pouvez l'appeler comme ceci:

filterItemsByRadius(userRadius, items).then(resp => { 
    console.log(resp); 
}); 

Vous pourrez voir le résultat dans la console maintenant.