In meinem Code lade ich Daten von Json mit d3.json - und um es zum Laufen zu bringen rufe ich eine andere Funktion auf, sobald die Daten geladen sind und den JSON dort zur Verarbeitung übergeben. Dies scheint zu funktionieren, aber weigert sich immer noch, etwas anderes als "undefiniert" zurückzugeben.Warum kann ich console.log (Variable) bekommen, um meinen Wert zu geben, aber keine Variable zurückgeben?
Mein Code:
function GetDataFromJson() {
var jsonData;
d3.json("http://localhost:8000/pipeline.json", function(dataFromServer){
jsonData = dataFromServer;
NewValue(jsonData);
});
}
und
function NewValue(data){
var jsonData = data;
headers = ["Won"];
var myTotal = 0;
chunks = (headers.map(function(priceRange) {
return jsonData.map(function(d) {
return {y: +d[priceRange]};
});
}));
var myTarget = 10000000;
chunks.forEach(function (arrayItem)
{
var l = 12;
for(var i = 0; i < l; i++) {
myTotal += arrayItem[i].y;
};
});
myTotal = myTotal/myTarget*100;
return myTotal;
}
Ich laufe dies in Firefox Firebug GetDataFromJson()
verwenden und mit dem Code oben als Service-Leistung erhalte ich "undefined" gerade in der Konsole. Wenn ich eine Zeile console.log(myTotal)
vor der Return-Anweisung ich bekomme "undefiniert" und "37.5" als 2 separate Zeilen zurückgegeben - 37,5 ist der richtige Wert aus den Daten, die ich analysiert.
Warum gibt nicht zurückgeben myTotal als das Ergebnis der Funktion, während console.log() ist?
Hinzufügen Json Daten
[
{
"Month": "Jan",
"Prospecting": 0,
"Qualifying": 0,
"Demonstrating": 0,
"Negotiating": 0,
"Won": 1000000,
"Lost": 350000
},
{
"Month": "Feb",
"Prospecting": 0,
"Qualifying": 0,
"Demonstrating": 0,
"Negotiating": 0,
"Won": 750000,
"Lost": 2750775
},
{
"Month": "Mar",
"Prospecting": 0,
"Qualifying": 0,
"Demonstrating": 0,
"Negotiating": 250000,
"Won": 2000000,
"Lost": 750000
},
{
"Month": "Apr",
"Prospecting": 0,
"Qualifying": 0,
"Demonstrating": 0,
"Negotiating": 1375000,
"Won": 0,
"Lost": 0
},
{
"Month": "May",
"Prospecting": 0,
"Qualifying": 0,
"Demonstrating": 750000,
"Negotiating": 0,
"Won": 0,
"Lost": 0
},
{
"Month": "Jun",
"Prospecting": 0,
"Qualifying": 0,
"Demonstrating": 325000,
"Negotiating": 0,
"Won": 0,
"Lost": 0
},
{
"Month": "Jul",
"Prospecting": 0,
"Qualifying": 50000,
"Demonstrating": 1000000,
"Negotiating": 0,
"Won": 0,
"Lost": 0
},
{
"Month": "Aug",
"Prospecting": 10000,
"Qualifying": 35000,
"Demonstrating": 0,
"Negotiating": 0,
"Won": 0,
"Lost": 0
},
{
"Month": "Sep",
"Prospecting": 12250,
"Qualifying": 22500,
"Demonstrating": 0,
"Negotiating": 0,
"Won": 0,
"Lost": 0
},
{
"Month": "Oct",
"Prospecting": 0,
"Qualifying": 0,
"Demonstrating": 0,
"Negotiating": 0,
"Won": 0,
"Lost": 0
},
{
"Month": "Nov",
"Prospecting": 100000,
"Qualifying": 325000,
"Demonstrating": 750000,
"Negotiating": 0,
"Won": 0,
"Lost": 0
},
{
"Month": "Dec",
"Prospecting": 120000,
"Qualifying": 370500,
"Demonstrating": 670000,
"Negotiating": 0,
"Won": 0,
"Lost": 0
}
]
Sie können das nicht tun. http: //blog.slaks.net/2015-01-04/async-method-patterns/ – SLaks
bitte geben sie einige beispiel json data – Ray
Dank @SLaks - Ich lese den blog, und es scheint, ich brauche versprechen, dies zu erhalten, um das ergebnis myTotal von der NewValue-Funktion zu liefern. Ich kann nicht ganz verstehen, wie ich das anhand deines Artikels machen würde - kannst du mir helfen, zu erläutern, wie ich ein Versprechen in diesem Fall benutzen kann? – Zoinks10