На данный вопрос уже ответили:
var
fs = require('fs'),
dir = "header.html";
function getFile(dir) {
var res;
fs.stat(dir, function(err, stats) {
if(err)
return console.log(err);
fs.readFile(dir, function(err, data) {
res = new Buffer( data );
});
});
return res;
}
console.log( getFile(dir) );
Данный код возвращает undefined
и никак не пойму почему же это происходит. Заранее спасибо!
Вы изспользуете асинхронныые функции (всякая функция с коллбэком, как правило, асинхронная). Сам их смысл в том, что результат их работы вы можете получить только внутри коллбэка. Результат работы fs.stat()
доступен внутри её коллбэка и перередаётся там fs.readFile()
, а результат работы fs.readFile()
доступен уже только внутри её коллбэка, второго уровня вложенности, и т.д. Когда вы возвращаете return res;
, fs.stat()
ещё не окончила работу, а fs.readFile()
ещё даже не начала, поэтому значение res
возвращается сразу после объявления, когда оно всё ещё undefined
. Получить содержимое файла и вывести его в console.log()
можно только внутри самого глубокого коллбэка:
var
fs = require('fs'),
dir = "header.html";
function getFile(dir) {
fs.stat(dir, function(err, stats) {
if(err)
return console.log(err);
fs.readFile(dir, function(err, data) {
var res = new Buffer( data );
console.log(res);
});
});
}
getFile(dir);
Синхронный вариант:
'use strict';
var
fs = require('fs'),
dir = "header.html";
function getFile(dir) {
var stats = fs.statSync(dir);
var res = fs.readFileSync(dir);
return res;
}
console.log( getFile(dir) );
Виртуальный выделенный сервер (VDS) становится отличным выбором
есть слайдер к которому нужно подключить autoplayПоискал ответы в интернете, не один не помог, а чтобы написать самому скрипт знаний маловато
Создать класс, который производит экземпляр со следующими свойствами: - promise - промис, который создается во время запуска конструктора; - reject...
Всем привет, есть вот такая диллема, и я не могу понять что здесь происходит: