Ответ 1
Как было предложено dandavis в своем комментарии, readFile
ничего не делает, потому что это асинхронный вызов. Ознакомьтесь с этим ответом для получения дополнительной информации о том, что это значит.
Короче говоря, асинхронный вызов никогда не ждет возврата результата. В вашем примере getData
не ждет, пока readFile()
вернет результат, который вы хотите, но сразу же закончите. Асинхронные вызовы обычно обрабатываются передачей callbacks
, которая является последним параметром readFile
и writeFile
.
В любом случае, есть два способа сделать это:
1. Асинхронно (что является правильным способом):
function copyData(savPath, srcPath) {
fs.readFile(srcPath, 'utf8', function (err, data) {
if (err) throw err;
//Do your processing, MD5, send a satellite to the moon, etc.
fs.writeFile (savPath, data, function(err) {
if (err) throw err;
console.log('complete');
});
});
}
2. Делайте это синхронно. Ваш код не должен сильно меняться, вам просто нужно заменить readFile
и writeFile
на readFileSync
и writeFileSync
соответственно. Предупреждение: использование этого метода связано не только с лучшими практиками, но и против самой цели использования nodejs (если, конечно, у вас нет законной причины).
Изменить. В соответствии с запросом OP, здесь есть один из возможных способов разделить два метода, например, с помощью обратных вызовов:
function getFileContent(srcPath, callback) {
fs.readFile(srcPath, 'utf8', function (err, data) {
if (err) throw err;
callback(data);
}
);
}
function copyFileContent(savPath, srcPath) {
getFileContent(srcPath, function(data) {
fs.writeFile (savPath, data, function(err) {
if (err) throw err;
console.log('complete');
});
});
}
Таким образом вы отделяете прочитанную часть (в getFileContent
) от части копии.