我要疯了,试图修复这个bug,所以请帮助:-)我正在使用https://pdfkit.org/
这将创建一个流,完成后将通过管道传输到fs。
我的问题是代码第一次运行时,这个工作并生成PDF。下一次代码运行时,创建了一个文件,并创建了零错误。我正在从运行在express上的API调用该函数。问题似乎是fs. fullWriteStream的JavaScript特性。流在API返回后完成。我似乎无法找到一种方法来阻止,同时确认文件已创建。
奇怪的是,第一次运行代码时,它会失败:
这里是管道函数;
async function _writeFile(fileObj) {
let fileStream = fs.createWriteStream(fileObj.fileName)
pipeline(
doc,
fileStream,
async (err) => {
if (err) {
console.error('PDF failed', err);
return ('Pipeline failed', err)
} else {
console.log('PDF succeeded');
}
}
)
}
字符串
这被称为:
exports.drawReport = async (payload) => {
var date = new Date();
const timeStamp = date.toJSON();
let path = './controllers/tmp/'
var fileName = path + timeStamp + '.' + payload.type + '.pdf'
try {
// Start Report
await _startReport(payload)
// Check Starting position on page & add status box header
if (device_card_reference == 260) {
await _deviceTitle(payload);
}
// Add Devices
await _reportDevice(payload);
// Call Footer for final page
await _reportFooter()
console.log("PDF Done - Writing File")
// File Meta Data
let fileObj = {
type: payload.type,
siteId: payload.siteId,
fileName: fileName,
timeStamp: timeStamp
}
// Create file to store PDF
await _writeFile(fileObj)
doc.end()
console.log("PDF MADE?")
return (fileObj)
} catch (err) {
console.error('MakePDF ERROR: ' + err.message);
return (err.message)
}
}
型
1条答案
按热度按时间2vuwiymt1#
pipeline
异步运行,因此不会等待,这就是为什么doc.end()
在文件完成之前运行尝试在promise中 Package
pipeline
,然后在流完成时解析:字符串
添加
.catch()
来处理错误:型
或者更好,使用流承诺API
型