2014-10-08 13 views
6

Sono un po 'imbarazzato per fare questa domanda perché sembra che dovrebbe essere così ovvio, ma sono piuttosto debole nel trattare con problemi asincroni, e io Sono confuso su come procedere.Recupero dei dati analizzati da CSV nell'oggetto Javascript (utilizzando Papa Parse)

Sto usando Papa Parse (http://papaparse.com/docs.html#remote-files) per analizzare un CSV remoto. Voglio memorizzare il risultato del parse in un oggetto da usare in seguito. Ecco il mio codice:

var dataset = {};  

    Papa.parse("http://path/to/some.csv", { 
     download: true, 
     dynamicTyping: true, 
     complete: function(results) { 
     dataset = results.data; 
     } 
    }); 

console.log(dataset); 

Questo, ovviamente, comporta il log in un oggetto vuoto registrato nella console. Qualsiasi tentativo di utilizzare il set di dati non funziona perché, naturalmente, l'oggetto dataset non ha effettivamente ricevuto i suoi dati al momento dell'esecuzione del codice. Qualcuno può aiutarmi per favore a rifattori o spiegare come mi occupo di questo?

risposta

19

C'è un motivo per cui la variabile del set di dati deve essere utilizzata al di fuori della funzione? Il modo più semplice per assicurarsi che il set di dati sia compilato consiste nel manipolare il set di dati nella funzione 'completa' subito dopo che è, beh, popolato.

Un'alternativa è quella di aggiungere un callback in questo modo:

function doStuff(data) { 
    //Data is usable here 
    console.log(data); 
} 

function parseData(url, callBack) { 
    Papa.parse(url, { 
     download: true, 
     dynamicTyping: true, 
     complete: function(results) { 
      callBack(results.data); 
     } 
    }); 
} 

parseData("tests/sample.csv", doStuff); 
+0

questo era esattamente il riorientamento di cui avevo bisogno. Sto ancora imparando su callback e asincroni, quindi questo mi ha davvero aiutato a demistificarlo per me. GRAZIE!!!! – TheNovice

+0

Sì! Ha funzionato come un fascino aggiungendo il callback! Grazie! – WizzyBoom

Problemi correlati