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?
Wie gesagt, fs.readFile
ist eine asynchrone Aktion. Das bedeutet, dass Sie, wenn Sie node anweisen, eine Datei zu lesen, berücksichtigen müssen, dass dies einige Zeit in Anspruch nehmen wird, und dass node in der Zwischenzeit den folgenden Code ausführt. In Ihrem Fall ist es: console.log(content);
.
Es ist, als würde man einen Teil des Codes auf eine lange Reise schicken (wie das Lesen einer großen Datei).
Schauen Sie sich die Kommentare an, die ich geschrieben habe:
var content;
// node, go fetch this file. when you come back, please run this "read" callback function
fs.readFile('./Index.html', function read(err, data) {
if (err) {
throw err;
}
content = data;
});
// in the meantime, please continue and run this console.log
console.log(content);
Deshalb ist content
noch leer ist, wenn Sie es protokollieren, hat der Knoten den Inhalt der Datei noch nicht abgerufen.
Dies könnte durch die Verschiebung console.log(content)
innerhalb der Rückruffunktion, direkt nach content = data;
. Auf diese Weise sehen Sie das Protokoll, wenn der Knoten die Datei gelesen hat und nachdem content
erhält einen Wert.
Verwenden Sie die eingebaute promisify-Bibliothek (Node 8+), um diese alten Callback-Funktionen eleganter zu gestalten.
const fs = require('fs');
const util = require('util');
const readFile = util.promisify(fs.readFile);
async function doStuff() {
try {
const content = await readFile(filePath, 'utf8');
console.log(content);
} catch (e) {
console.error(e);
}
}
const fs = require('fs')
function readDemo1(file1) {
return new Promise(function (resolve, reject) {
fs.readFile(file1, 'utf8', function (err, dataDemo1) {
if (err)
reject(err);
else
resolve(dataDemo1);
});
});
}
async function copyFile() {
try {
let dataDemo1 = await readDemo1('url')
dataDemo1 += '\n' + await readDemo1('url')
await writeDemo2(dataDemo1)
console.log(dataDemo1)
} catch (error) {
console.error(error);
}
}
copyFile();
function writeDemo2(dataDemo1) {
return new Promise(function(resolve, reject) {
fs.writeFile('text.txt', dataDemo1, 'utf8', function(err) {
if (err)
reject(err);
else
resolve("Promise Success!");
});
});
}
Synchrones und asynchrones Lesen von Dateien:
//fs module to read file in sync and async way
var fs = require('fs'),
filePath = './sample_files/sample_css.css';
// this for async way
/*fs.readFile(filePath, 'utf8', function (err, data) {
if (err) throw err;
console.log(data);
});*/
//this is sync way
var css = fs.readFileSync(filePath, 'utf8');
console.log(css);
Node Cheat Verfügbar unter datei_lesen .
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.