【发布时间】:2016-07-28 21:21:29
【问题描述】:
我正在尝试使用此代码读取文件的内容:
var content = fs.readFileSync(filename);
当存在具有此类文件名的文件时,它可以正常工作。但是,如果文件不存在,它不会做任何事情。它永远挂在那里。
一种解决方案可能是在我尝试读取文件之前检查文件是否存在,但我希望这将成为 fs 模块的一部分,以便它返回未定义或我可以方便地处理的任何错误。
这几乎是我的全部代码,你能看到任何问题吗?我不能。
for (var i=0; i<configFiles.length;i++){
waterfallMain(configFiles[i]);
}
//var importDefinition = config.importDefinition;
function waterfallMain(configFile){
async.waterfall([
function(callback){
sftpHandler.downloadFile(credentials.host, credentials.username, credentials.password, credentials.path+configFile.importFileName, callback);
console.log("Downloading done. Changing file encoding and reading data.");
readFileSync_encoding(configFile.importFileName, "ISO-8859-1", callback);
},
function(fileData, callback) {
mainProcess(fileData, callback);
},
function(data, callback) {
postImportDefinition(data, callback);
},
function(data, uri, callback) {
postData(data, uri, callback);
},
function(syncUri, callback) {
getSyncResponseInIntervals(syncUri, callback);
}],
// the bonus final callback function
function(err, status) {
if (err) {
console.log(err);
}
console.log(status);
return;
});
}
function readFileSync_encoding(filename, encoding, callback) {
var content = fs.readFileSync(filename);
callback(null, iconvlite.decode(content, encoding));
return;
}
编辑:
问题实际上出在我一直在使用 c9.io 的 IDE 中
当我在本地运行它时,我收到了错误。 有趣的发现。
【问题讨论】:
-
当我在一个不存在的文件上运行该命令时,它会引发异常:
Error: ENOENT: no such file or directory, open 'not-here.txt'。你确定你没有捕获并默默地忽略异常吗? -
确实可以解释。我在瀑布中调用了该方法,即使我将控制台日志放在我应该捕获错误的位置,或者我放置了一个断点,它也不会被执行。我没有其他处理。不过会做更好的检查。