Javascript async-Funktion der Konsole an die zurückgegebenen Daten
Wie kann ich die Konsole an - oder tun Sie, was mit den zurückgegebenen Daten in einer async-Funktion?
Beispiel:
JS-DATEI:
async function getData(){
try {
$.getJSON('./data.json', (data) => {
return data;
});
} catch(error) {
console.log("error" + error);
} finally {
console.log('done');
}
}
console.log(getData());
JSON-DATEI:
{
"stuff": {
"First": {
"FirstA": {
"year": [2007, 2008, 2009, 2010, 2011, 2012, 2013, 2014, 2015, 2016, 2017],
"Categories": ["Suspension", "Electrical", "Performance", "Motor"]
},
"FirstB": {
"year": [2007, 2008, 2009, 2010, 2011, 2012],
"Categories": ["Suspension", "Electrical", "Performance", "Motor"]
}
},
"Second": {
"SecondA": {
"year": [2002, 2003, 2004, 2005, 2006],
"Categories": ["Suspension", "Electrical", "Performance", "Motor"]
},
"SecondB": {
"year": [2007, 2008, 2009, 2010, 2011, 2012],
"Categories": ["Suspension", "Electrical", "Performance", "Motor"]
}
}
}
}
Wie kann ich die Rückkehr /erhalten Zugang zu allen Informationen, die in der JSON-Datei und die Arbeit mit ihm. zum Beispiel nehme ich gerne die "Erste" und "Zweite", und fügen Sie ein div-Element. Dasselbe mit "FirstA" und "FirstB" und "SecondA" und "SecondB"...und so weiter.
Recht, wie es jetzt steht, bekomme ich Versprechen {undefiniert}
Jegliche Hilfe würde sehr geschätzt werden.
---------UPDATE---------
Wenn ich die Konsole ausführen, melden Sie innerhalb der Funktion habe ich dann sehen können, die json-Daten, aber ich brauche den Zugriff auf die Daten außerhalb der Funktion.
Serge
- Möglich, Duplikat der Wie gebe ich die Antwort eines asynchronen Aufruf?
Du musst angemeldet sein, um einen Kommentar abzugeben.
Zwei Fragen:
Zu set den Wert der Auflösung des promise-erstellt durch die
async
Funktion, die Sie verwenden müssen, einereturn
Erklärung desasync
Funktion selbst. Dein code hat einereturn
imgetJSON
callback (was ignoriert wird), nicht dieasync
Funktion selbst.Zu bekommen den Wert der Auflösung einer
async
- Funktion, müssen Sieawait
es (oder verbrauchen Ihr Versprechen in der älteren Weise, überthen
usw.).For #1, die Sie zurückgeben könnte das Ergebnis von
await
inggetJSON
:Und für #2, Sie müssten entweder
await
Ihre Funktion (dies würde wiederum müssen innerhalb einerasync
- Funktion):...oder verbrauchen Ihr Versprechen über
then
:Seite Hinweis: Ihre
getData
verbirgt sich Fehler, die sich in Resolutionen mit dem Wertundefined
, die in der Regel nicht eine gute Idee. Stattdessen sicherzustellen, dass es überträgt die Fehlermeldung:Dann, natürlich, sicherzustellen, dass alles, was mit
getData
entweder verarbeitet oder verbreitet die Fehler, so dass Sie sicher etwas, das irgendwo hat behandeln (andernfalls erhalten Sie eine "nicht behandelte Abstoßung" - Fehler).Re Ihr Kommentar
Den async-Ergebnis /Auflösung Wert von
getData
ist das Objekt der JSON definiert (es ist nicht mehr JSON, es ist schon geparst). So würden Sie verwenden.stuff
auf Sie, z.B.:getData
gibt ein Versprechen, und Versprechen nicht eine Eigenschaft namensstuff
. Ich habe Hinzugefügt, um das Ende der Antwort.await
in einemasync
Funktion.async () => console.log(await getData())