获取电子预加载以与 Quasar 渲染器异步运行 - Nodemailer

问题描述 投票:0回答:1

我的桌面应用程序可以通过 Nodemailer 从 Quasar / Electron 发送 SMTP 电子邮件。这实际上效果很好。

但是,如果 electro-preload.js 中的脚本产生错误,则我的 Quasar .vue 页面已经完成,而 electro-preload 脚本仍在运行。因此,在电子邮件发送后,如果出现错误,我无法使用已经完成的 .vue(渲染器)页面捕获它。

我已经用谷歌搜索了几天,看看是否有办法让电子预加载异步运行,以便我的 .vue 页面在完成之前等待结果。我没有找到解决方案。

我的用户将他们的 SMTP 电子邮件标准保存在数据库中,因此我需要将其以及其他信息发送到 electro-preload.js,以便可以正确生成电子邮件然后发送出去。

我一直在尝试各种方法来获取预加载以发回我需要的信息..我可以完成该任务,但每次我的 .vue 页面首先完成时,我无法捕获错误,因此我可以显示它给用户。我可以在控制台上看到它,但在我想要的时候却看不到。

电子预加载似乎并不能真正异步工作。我找到了一些例子,但我很难让它们适用于我的情况。我将不胜感激任何帮助。

这是我的工作代码:

渲染器(.vue)文件:

const res = await myAPI.sendTheEmail(
    this.attachButtonToggle,
    this.stringifiedemailSMTPLoginArray,
    this.stringifiedemailsSubjBodyArray,
    this.stringifiedemailSendToPeopleArray,
    this.theEventType,
    emailType,
 )
console.log(' emailSetup.vue sendTheEmail res: ', res)

这是我的 electro-preload.js 中的脚本:


contextBridge.exposeInMainWorld('myAPI', {

 sendTheEmail: (numOfAttach, stringifiedEemailInfoArray, stringifiedemailDetailsArray, stringifiedEtheEmailArray, theEventType, emailType) => {

  const result = transporter.sendMail(mailOptions, (error, info) => {
    if (error) {
      console.log("there is an error but this works - ERROR " + error)
      return result
    } else {
      console.log('Email sent: ' + info.response)
      return result
   }
 })  


  }
}
node.js electron nodemailer quasar-framework
1个回答
0
投票

这根本不是预加载甚至 Electron 相关的问题。你有一个函数(我假设)只能与回调一起使用,但你需要一个Promise。所以你需要自己创建 Promise:

sendTheEmail: (
  numOfAttach,
  stringifiedEemailInfoArray,
  stringifiedemailDetailsArray,
  stringifiedEtheEmailArray,
  theEventType,
  emailType
) => (
  new Promise((resolve, reject) => {
    transporter.sendMail(mailOptions, (error, info) => {
      if (error) {
        console.log("there is an error but this works - ERROR " + error);
        reject(error); // Or `resolve` if you don't want an error to be thrown
      } else {
        console.log('Email sent: ' + info.response);
        resolve(info.response);
      }
    });
  })
);
© www.soinside.com 2019 - 2024. All rights reserved.