2017-01-15 1 views
0

Hier ist mein Code:Wie stellt man sicher, dass alle Daten in das Array geschoben werden, bevor das Versprechen erfüllt wird?

let promise = new Promise((resolve, reject) => { 
      let dataArray: Array<Object> = []; 
      d3.csvParse(csvData, (data, error) => { 
       if (error) reject('error occurred while parsing csv'); 
       dataArray.push(data); 
      }); 
      resolve(dataArray); 
     }); 

I d3 bin mit der CSV-Datei zu analysieren, die vom Server abgerufen wird. Was ich im Grunde versuche zu tun, ist sicherzustellen, dass die Analyse durchgeführt wird, bevor das Versprechen/Objekt zurückgegeben wird, also übergebe ich es an eine andere Funktion (hier nicht gezeigt). Danke

Antwort

2

Ich habe die Dokumentation von csvParse lesen und Sie können Ihren Code einfache Änderung mit diesem

dataArray=d3.csvParse(csvData); 
resolve(dataArray); 

Sie brauchen nicht jede Zeile auf Array in die Funktion hinzuzufügen, da die csvParse gibt ein Array zurück wenn es

+0

https://runkit.com/587b513664a8d4001433714a/587b513664a8d4001433714b zu analysieren beendet Sie müssen die Callback-Funktion weglassen, oder Sie werden nur die Spalten-Header in 'dataArray' – Booster2ooo

+0

Ihnen für Ihre Antwort danken lässt. Das Problem hier ist, dass das Versprechen immer abgelehnt wird, irgendwelche Ideen warum? Ich werde versuchen, den Rückruf wegzulassen, wie @ Booster2ooo vorgeschlagen hat. – abedzantout

+0

Es wird zurückgewiesen, weil das zweite Argument von csvParse der Index der Zeile ist, kein Fehler. Sobald also der Index 1 erreicht wird, ist die Bedingung erfüllt und das Versprechen wird abgelehnt. https://github.com/d3/d3-dsv/blob/master/README.md#csvParse – Booster2ooo

Verwandte Themen