I want to write the output of my javascript to a file using fs 将隐藏的div加载为Popup。但我注意到当我把 fs.appendFile()放入我的内部时fs不起作用 的 ec2.describeSpotFleetRequests()即可。针对这种情况的任何解决方法?
示例代码:
fs.appendFile('./spotfleet.txt', 'Hello world!', (err) => {
if (err) throw err;
console.log('It\'s saved!');
});
ec2.describeSpotFleetRequests(params,function(err, data) {
if (err) console.log(err, err.stack);
else {
for (var fleet in data.SpotFleetRequestConfigs) {
reqId = data.SpotFleetRequestConfigs[fleet].SpotFleetRequestId; // gets spot fleet ID
fs.appendFile('./spotfleet.txt', 'Hello world!', (err) => {
if (err) throw err;
console.log('It\'s saved!');
});
}
}
});
第一个fs.appendFile将编写" Hello world!"到spotfleet.txt但第二个fs.appendFile不会运行。
答案 0 :(得分:0)
您是否尝试过使用winston之类的外部库?它内置支持将日志保存到单独的文件中:
winston.add(winston.transports.File, { filename: 'spotfleet.txt' })
或通过configure()
来电:
winston.configure({
transports: [
new (winston.transports.File)({ filename: 'spotfleet.txt' })
]
})
您使用触发的所有日志,例如:
winston.info('Hello world!')
将保存到所需的文件。它比console.log
更优雅......
<强>更新强>
因为您通过提供代码示例编辑了您的问题,所以我在这里看到了问题所在。
fs.appendFile
异步,因此您无法像循环中那样在循环中调用它。
完成一个fs.appendFile
操作后,使用回调来保存另一个操作。
答案 1 :(得分:0)
正如szymonm在他的回答中提到的,fs.appendFile()
是异步的,所以我不能在循环中调用它。同步版本有fs.appendFileSync()
的好处。为什么我之前没有注意到,我不知道。