Node.js   发布时间:2022-04-24  发布网站:大佬教程  code.js-code.com
大佬教程收集整理的这篇文章主要介绍了node.js – 在Firebase云功能上使用带有PDFMake的promise大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。
我正在使用PDFMake(PDFKit的变体)使用实时数据库触发器在Firebase云功能生成PDF.该函数数据库获取所有相关数据,然后将其传递给应该生成PDF的函数.

所有这些都是使用Promises完成的.一切正常,直到实际生成PDF.

这是我的主要事件监听器中的代码

exports.handler = (admin,event,storagE) => {
  const quotationData = event.data.val();
  // We must return a Promise when performing async tasks inside Functions
  // Eg: WriTing to realtime db
  const CompanyId = event.params.CompanyId;
  setTings.getCompanyProfile(admin,CompanyId)
  .then((profilE) => {
    return quotPdfHelper.generatePDF(fonts,profile,quotationData,storagE);
  })
  .then(() => {
    console.log('Generation successful. Pass for email');
  })
  .catch((err) => {
    console.log(`Error: ${err}`);
  });
};

生成PDF,这是我的代码

exports.generatePDF = (fonts,companyInfo,storagE) => {
  const printer = new PdfPrinter(fonts);
  const docDeFinition = {
    content: [
      {
        text: [
          {
            text: `${CompanyInfo.titlE}\n`,style: 'companyHeader',},`${CompanyInfo.addr_line1},${CompanyInfo.addr_line2}\n`,`${CompanyInfo.city} (${CompanyInfo.statE}) - INDIA\n`,`Email: ${CompanyInfo.email} • Web: ${CompanyInfo.websitE}\n`,`Phone: ${CompanyInfo.phonE}\n`,`GSTin: ${CompanyInfo.gst_registration_number}  • PAN: AARFK6552G\n`,],style: 'body',//absolutePosition: {x: 20,y: 45}
      },styles: {
      companyHeader: {
        fontSize: 18,bold: true,body: {
        fontSize: 10,pageMargins: 20,};
  return new Promise((resolve,reject) => {
    // const bucket = storage.bucket(`${PROjeCT_ID}.appspot.com`);
    // const fil@R_801_8371@ = `${Date.Now()}-quotation.pdf`;
    // const file = bucket.file(fileName);
    // const stream = file.createWriteStream({ resumable: false });
    const pdfDoc = printer.createPdfKitDocument(docDeFinition);
    // pdfDoc.pipe(stream);

    const chunks = [];
    let result = null;

    pdfDoc.on('data',(chunk) => {
      chunks.push(chunk);
    });
    pdfDoc.on('error',(err) => {
      reject(err);
    });
    pdfDoc.on('end',() => {
      result = Buffer.concat(chunks);
      resolve(result);
    });
    pdfDoc.end();
  });
};

这里有什么可能是错误的,这会阻止承诺,从而使报价代码按预期执行?

在firebase日志中,我看到的是函数执行耗时3288毫秒,完成状态:’ok’

解决方法

根据执行时间和缺少错误,看起来您正在为PDF成功创建缓冲区,但实际上并没有从函数中返回它.

.then((profilE) => {
  return quotPdfHelper.generatePDF(fonts,storagE);
})
.then(() => {
  console.log('Generation successful. Pass for email');
})

在上面的代码中,您将结果传递给下一个块,但随后从该块返回undefined.这个Promise链的最终结果将是未定义的.要通过结果,您需要在Promise链的末尾返回它:

.then((profilE) => {
  return quotPdfHelper.generatePDF(fonts,storagE);
})
.then(buffer => {
  console.log('Generation successful. Pass for email');
  return buffer;
})

大佬总结

以上是大佬教程为你收集整理的node.js – 在Firebase云功能上使用带有PDFMake的promise全部内容,希望文章能够帮你解决node.js – 在Firebase云功能上使用带有PDFMake的promise所遇到的程序开发问题。

如果觉得大佬教程网站内容还不错,欢迎将大佬教程推荐给程序员好友。

本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。