У меня есть приложение Node.js / (на основе экспресс) loopback.js, со службой PDF, которая использует HtmlToPDF для создания PDF-файлов.
Некоторый код:
services / pdf.js
exports.PDF = function(options, cb) {
// ...
var htmlToPDF = new HTMLToPDF({
// ... options
});
function sendBackFile(outputPath, cb) {
fs.readFile(outputPath, function (err, data) {
if (err) {cb(err)}
var contentDisposition = 'attachment; filename=' + filename + '.pdf';
cb(null, data, 'application/pdf', contentDisposition, 'SAMEORIGIN');
})
}
// start / stop Xvfb code ...
htmlToPDF.build(function (err) {
if (err) {cb(err)};
// read the file and send it back
sendBackFile(outputPath, cb)
});
}
Для разных типов PDF у меня есть разные шаблоны.(для другого имени, outputPath, шаблона и т. д. для каждого типа)
exports.invetory = function(html, cb) {
exports.PDF({
html: html
}, cb);
}
И вот пример того, как я использую сервис из кода.
модели / инвентарь.js
Inventory.pdf = (id, next) => {
pdf.inventory('yo', next);
}
Разбивка
- Служба PDF импортируется в код, а шаблон инвентаря называется
- Шаблон инвентаризации вызывает службу PDF
- Служба PDF запускает экземпляр htmlToPDF, PDF создается и сохраняется как файл.
- файл считывается с диска, а API отправляет его обратно.
Вопрос
Я пытаюсь заставить мою функцию Inventory.pdf
сделать асинхронную / ожидающую уведомления.Но если я сделаю
Inventory.pdf = async (id, next) => {
return await pdf.inventory('yo', next);
}
next (функция обратного вызова) будет undefined , это нормально, но как мне изменить службу PDF, чтобы она работала с обоими асинхронными вызовами?и со старым способом обратного вызова.(У меня есть много старых шаблонных функций в коде).Любые предложения приветствуются.