如何使其仅在使用async await生成pdf后才发送pdf

时间:2019-01-03 18:18:38

标签: node.js express asynchronous pdf-generation sendmail

如何使邮件传输器等到生成pdf?

我附上了我尝试过的代码。我的浏览器挂起,无法发送电子邮件。问题是邮件传输器会在生成pdf之前尝试发送电子邮件。我猜我没有使用异步并在正确的位置等待。

      async () => {
        await pdf.create(document, options).then(res => {
          console.log(res)
        }).catch(error => {
          console.error(error)
        })

        let message = "Testing"

        let mailOptions = {
          from: "xxx@gmail.com",
          to: "yyy@gmail.com",
          subject: 'Subject testing',
          text: message,
          attachments: [{
            path: __dirname + '/../public/reports/' + 'test.pdf',
          }]
        }

        await transporter.sendMail(mailOptions, (error, info) => {
          if (error) {
            console.log(error);
          } else {
            console.log("sent email")
            res.json({
              email: "sent"
            });
          }
        })
      }

1 个答案:

答案 0 :(得分:0)

我知道了。我没有调用该函数,因此未执行该操作。我删除了transporter.sendMail中的await,因为它没有执行任何操作。

  sendPDF();
  async function sendPDF() {
    await pdf.create(document, options).then(res => {
      console.log(res)
    }).catch(error => {
      console.error(error)
    })

    let message = "Testing"

    let mailOptions = {
      from: "xxx@gmail.com",
      to: "yyy@gmail.com",
      subject: 'Subject testing',
      text: message,
      attachments: [{
        path: __dirname + '/../public/reports/' + 'test.pdf',
      }]
    }

    transporter.sendMail(mailOptions, (error, info) => {
      if (error) {
        console.log(error);
      } else {
        console.log("sent email")
        res.json({
          email: "sent"
        });
      }
    })
  }