我正在Google Cloud函数中创建一个函数,该函数应返回base64 pdf。我正在使用pdfmake库。使用console.log()可以看到base64正确生成,但是我无法将值返回给调用者。
PDF文档以.end()关闭,并触发事件.on('end')。问题是我似乎无法从事件内部返回值。
当我将return放入事件中时(目前是这样),firebase会等待并返回null。
如果我将返回值放在.end()之后,则返回的值为null,就好像该事件是异步的并且没有时间进行处理。
exports.pdf = functions.https.onCall((data, context) => {
var PdfPrinter = require('pdfmake');
var printer = new PdfPrinter(fonts);
let fonts = {...};
var docDefinition = {...};
var pdfDoc = printer.createPdfKitDocument(docDefinition);
let chunks = [];
let pdfBase64 = null;
pdfDoc.on('data', (chunk) => {
chunks.push(chunk);
});
pdfDoc.on('end', () => {
const result = Buffer.concat(chunks);
pdfBase64 = 'data:application/pdf;base64,' + result.toString('base64');
console.log(pdfBase64);
return {pdfBase64: pdfBase64};
});
pdfDoc.end();
});
如何返回值?
答案 0 :(得分:0)
您需要返回一个承诺,该承诺最终将与数据一起解析以发送给客户端。尝试这样的事情:
// everything above stays the same
const p = new Promise((resolve, reject) => {
pdfDoc.on('end', () => {
const result = Buffer.concat(chunks);
pdfBase64 = 'data:application/pdf;base64,' + result.toString('base64');
console.log(pdfBase64);
resolve({pdfBase64: pdfBase64});
});
})
pdfDoc.end();
return p;