J'ai juste un fichier csv et j'essaie d'obtenir les données avec une fonction asynchrone mais je ne suis pas défini.

<script>
    async function data(pathToCsv) {
        return await d3.csv(pathToCsv, function (data) {
            data.year = +data.year
            data.running_total = +data.running_total
            data.date = new Date(data.year, 0)
            return data
        })
    };
    let dataset = data('q3.csv');
    console.log(dataset.year);
</script>
0
Ramin Melikov 14 sept. 2020 à 12:43

2 réponses

Meilleure réponse

Le problème ici est que votre fonction de données renvoie une promesse et que l'accès à year à partir d'un objet de promesse renverra undefined, vous devez ajouter await lors de l'appel de votre data function

 async function data(pathToCsv) {
        return await d3.csv(pathToCsv, function (data) {
            data.year = +data.year
            data.running_total = +data.running_total
            data.date = new Date(data.year, 0)
            return data
        })
   };

  async function init() {
     let dataset = await data('q3.csv');
     // this should work now assuming you are using d3 function correctly as i'm not aware of d3 functions myself
     console.log(dataset.year); 
  }

  init()
1
ehab 14 sept. 2020 à 10:11

Je l'ai résolu.

<script>

    async function data(pathToCsv) {
        let dataset = await d3.csv(pathToCsv, function (d) {
            d.year = +d.year
            d.running_total = +d.running_total
            d.date = new Date(d.year, 0)
            return d
        })
        return dataset
    };

    data('q3.csv').then(function(d) {
        d.forEach(function(p){
            console.log(p.date.getFullYear());
        })
    });

</script>
0
Ramin Melikov 14 sept. 2020 à 18:20