Daugiau
Duomenų gavimas iš fs.readFile
var content;
fs.readFile('./Index.html', function read(err, data) {
if (err) {
throw err;
}
content = data;
});
console.log(content);
Žurnalai neapibrėžti
, kodėl?
275
3
Norėdamas patikslinti tai, ką pasakė @Raynos, noriu pasakyti, kad jūsų apibrėžta funkcija yra asinchroninis grįžtamasis skambutis. Ji nevykdoma iš karto, o įvykdoma, kai baigiamas failo įkėlimas. Kai iškviečiate readFile, valdymas grąžinamas iš karto ir vykdoma kita kodo eilutė. Taigi, kai iškviečiate console.log, jūsų grįžtamasis iškvietimas dar nėra įvykdytas ir šis turinys dar nenustatytas. Sveiki atvykę į asinchroninį programavimą.
Pavyzdžių metodai
Arba dar geriau, kaip rodo Raynos pavyzdys, įvilkite savo iškvietimą į funkciją ir perduokite savo atgalinius iškvietimus. (Matyt, tai geresnė praktika) Manau, kad įpratę asinchroninius iškvietimus įtraukti į funkciją, kuri priima grįžtamąjį ryšį, išvengsite daug rūpesčių ir netvarkingo kodo.
Tam iš tikrųjų yra sinchroninė funkcija:
http://nodejs.org/api/fs.html#fs_fs_readfilesync_filename_encoding
Asinchroninė
fs.readFile(filename, [encoding], [callback])
Asinchroniškai perskaito visą failo turinį. Pavyzdys:
_Grįžtamajam skambučiui perduodami du argumentai (err, data), kur data yra failo turinys.
_Jeigu nenurodyta koduotė, grąžinamas neapdorotas buferis.
SYNCHRONOUS
fs.readFileSync(filename, [encoding])
_Sinchroninė fs.readFile versija. Grąžinamas failo, pavadinto filename, turinys.
Jeigu nurodyta koduotė, ši funkcija grąžina eilutę. Priešingu atveju ji grąžina buferį.