【问题标题】:NodeJS email-templates promise hangs the executionNodeJS 电子邮件模板承诺挂起执行
【发布时间】:2020-01-12 00:27:16
【问题描述】:

我对这件事失去了兴趣。

我有一个名为 sendEmail 的函数:

sendEmail() {

        let emailAddress = "test@domain.tld";

        const email = new Email(
            {
                send: true,
                preview: false,
                message: {
                    from: 'sender@domain.tld',
                    to: emailAddress
                },
                transport: 
                {
                    host: 'smtp.domain.tld',
                    auth: {
                       user: 'user',
                       pass: 'pass'
                    }
                },
                i18n:
                {
                    locales: ['en-GB', 'en-US', 'it-IT'],
                    directory: path.join(__dirname, '../../emails/locales')
                }
            }
        );

        return email.send({
            template: 'map',
            locals: {
                locale: status.locale
            }
        }).then(console.log);
    }

它返回应该由 email.send 返回的 Promise(不知道这是不是真的!)。

在我的 test.js 代码中,我几乎尝试了所有方法,如下所示:

Promise.all([sendEmail()]).then(() =>console.log("Done"));

我在控制台中看到来自 email.send 的日志和最后的“完成”,但程序被挂起。它没有关闭。

为什么?我不明白。

【问题讨论】:

    标签: node.js promise email-templates


    【解决方案1】:

    不要认为您需要Promise.all,因为您只做一件事。

    关于节点进程未退出或处于挂起状态,可能有多种原因。像打开的数据库连接、打开的句柄等。节点有足够的能力查看一切是否完成并退出代码。您可以在控制台日志退出后手动调用process.exit,但理想情况下您不需要这样做。

    所以我还建议使用https://github.com/mafintosh/why-is-node-running 包来查找任何打开的句柄。您需要将它添加到您希望程序终止的位置。所以在你的情况下它会是这样的

    const log = require("why-is-node-running");
    
    sendEmail()
      .then(() => {
        console.log("Done");
        log();
      })
      .catch(err => console.error(err));
    

    【讨论】:

    • 谢谢。我会试试这个包。我只想强调这是正在运行的代码。没有不同的包或东西,根本没有数据库连接。
    【解决方案2】:

    似乎 i18n 部分阻塞了整个内容。

    我不知道具体原因,但删除那部分,一切正常。

    【讨论】:

      猜你喜欢
      • 2020-07-01
      • 2018-10-07
      • 2016-08-03
      • 1970-01-01
      • 1970-01-01
      • 2019-09-29
      • 2016-02-25
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多