var content;
fs.readFile('./Index.html', function read(err, data) {
if (err) {
throw err;
}
content = data;
});
console.log(content);
Protokolle undefined
warum?
var content;
fs.readFile('./Index.html', function read(err, data) {
if (err) {
throw err;
}
content = data;
});
console.log(content);
Protokolle undefined
warum?
Um zu erläutern, was @Raynos gesagt hat, ist die von Ihnen definierte Funktion ein asynchroner Rückruf. Sie wird nicht sofort ausgeführt, sondern erst, wenn das Laden der Datei abgeschlossen ist. Wenn Sie readFile aufrufen, wird die Kontrolle sofort zurückgegeben und die nächste Codezeile wird ausgeführt. Wenn Sie also console.log aufrufen, wurde Ihr Callback noch nicht aufgerufen, und der Inhalt wurde noch nicht gesetzt. Willkommen bei der asynchronen Programmierung.
Beispielhafte Ansätze
const fs = require('fs');
// First I want to read the file
fs.readFile('./Index.html', function read(err, data) {
if (err) {
throw err;
}
const content = data;
// Invoke the next step here however you like
console.log(content); // Put all of the code here (not the best solution)
processFile(content); // Or put the next step in a function and invoke it
});
function processFile(content) {
console.log(content);
}
Oder noch besser, wie Raynos Beispiel zeigt, verpacken Sie Ihren Aufruf in eine Funktion und übergeben Sie Ihre eigenen Rückrufe. (Offensichtlich ist dies die bessere Praxis) Ich denke, wenn Sie sich angewöhnen, Ihre asynchronen Aufrufe in eine Funktion zu verpacken, die einen Rückruf entgegennimmt, ersparen Sie sich eine Menge Ärger und unordentlichen Code.
function doSomething (callback) {
// any async callback invokes callback with response
}
doSomething (function doSomethingAfter(err, result) {
// process the async result
});
Hierfür gibt es eine Synchronous-Funktion:
http://nodejs.org/api/fs.html#fs_fs_readfilesync_filename_encoding
fs.readFile(filename, [encoding], [callback])
Liest asynchron den gesamten Inhalt einer Datei. Beispiel:
fs.readFile('/etc/passwd', function (err, data) {
if (err) throw err;
console.log(data);
});
Dem Callback werden zwei Argumente übergeben (err, data), wobei data der Inhalt der Datei ist.
Wenn keine Kodierung angegeben ist, wird der Rohpuffer zurückgegeben.
fs.readFileSync(filename, [encoding])
Synchrone Version von fs.readFile. Gibt den Inhalt der Datei mit dem Namen filename zurück.
Wenn die Kodierung angegeben ist, gibt diese Funktion eine Zeichenkette zurück. Andernfalls gibt sie einen Puffer zurück.
var text = fs.readFileSync('test.md','utf8')
console.log (text)
En mz
Modul stellt promisifizierte Versionen der Core Node Library zur Verfügung. Ihre Verwendung ist einfach. Installieren Sie zunächst die Bibliothek...
npm install mz
Dann...
const fs = require('mz/fs');
fs.readFile('./Index.html').then(contents => console.log(contents))
.catch(err => console.error(err));
Alternativ können Sie sie auch in asynchronen Funktionen schreiben:
async function myReadfile () {
try {
const file = await fs.readFile('./Index.html');
}
catch (err) { console.error( err ) }
};
CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.