Ich habe Probleme mit async/erwarten mit Node. Wenn ich das versuche:Warte auf asynchrone Funktion Ergebnisse in undefined
Es gibt undefined statt der JSON aus der Datei zurück. Warum wartet es nicht darauf, dass die Datei gelesen wird?
Ich habe Probleme mit async/erwarten mit Node. Wenn ich das versuche:Warte auf asynchrone Funktion Ergebnisse in undefined
Es gibt undefined statt der JSON aus der Datei zurück. Warum wartet es nicht darauf, dass die Datei gelesen wird?
Sie sind nicht alles von Read_Json_File
Rückkehr, so bekommen Sie nicht definiert - Sie Daten aus dem Rückruf sind Rückkehr, die nicht in irgendetwas zur Folge hat. Um stattdessen async/await zu verwenden, müssen Sie fs.readFile
promiziieren, da dies noch nicht geschehen ist. Dann werden Sie in der Lage sein verwenden async/await:
function readJSONFile() {
return new Promise((resolve, reject) => {
fs.readFile('import.json', 'utf-8', (err, data) => {
if (err) reject(err);
resolve(JSON.parse(data));
});
});
}
Await erfordert ein tatsächlichen Versprechen zu warten. Was dies tut, ist ein Versprechen, auf das man warten muss. So warten wir, bis wir resolve
nennen - was passiert, wenn wir die JSON fertig geladen:
let json = await readJSONFile();
console.log(json);
Hier stellen wir readJSONFile
nennen. Dies gibt eine Zusage zurück, die auflöst, wenn die JSON-Datei geladen wird, und ermöglicht scheinbar synchrone Ausführung von asynchronem Code.
Sie verpassten Versprechen zu lösen und abzulehnen.
Verwenden Sie wie folgt.
function Read_Json_File() {
return new Promise((resolve,reject)=> {
fs.readFile('import.json','utf-8',(err, data) => {
if (err) reject(err);
json_data = JSON.parse(data);
resolve(json_data);
});
}
});
versuchen es:
function Read_Json_File() {
return new Promise(resolve,reject => {
fs.readFile('import.json','utf-8',(err, data) => {
if (err) reject(err);
json_data = JSON.parse(data);
resolve(json_data);
});
}
Dies ist eine exakte Kopie von die beiden vorherigen Antworten, diesmal mit schlechtem Einzug und ohne erklärenden Text. –
ja jetzt ist es wie ein Traum dank funktioniert, aber ich hörte ich async/await ohne Versprechen nutzen können. ist das wahr? –
@OFSTTP Warten * erwartet ein Versprechen *. Async/erwarten ist nur syntaktischer Zucker für Versprechen. Sobald Sie es herunterkochen, async/erwarten Sie ist nur Versprechen - Sie können nicht nur Async-Code synchron ausführen. Sie werden immer Versprechungen zu einem gewissen Grad verwenden müssen, und async/erwarten Funktionen werden schließlich mehr Versprechen und Thesen. – Li357
@OFSTTP Siehe: https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Operators/await –