NodeJS email-шаблонов обещают зависание исполнения - PullRequest
0 голосов
/ 10 января 2020

Я теряю на это глаза.

У меня есть функция 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 (не знаю, правда ли это!).

В моем тесте. js код, я попробовал почти все, как это:

Promise.all ([sendEmail ()]). Then (() => console.log ("Готово" ));

И я вижу в консоли журнал из email.send и окончательное «Готово», но программа зависла. Это не закрывается.

Почему? Я не понимаю этого.

Ответы [ 2 ]

0 голосов
/ 11 января 2020

Кажется, что часть i18n блокирует весь материал.

Я не знаю точно, почему, но, удаляя эту часть, все работает правильно.

0 голосов
/ 10 января 2020

Не думайте, что вам нужен Promise.all, поскольку вы делаете только одну вещь.

Что касается процесса, не выходящего из узла или находящегося в состоянии зависания, то для этого может быть несколько причин. Как и соединения с открытыми БД, открытая ручка et c. Node достаточно capabale, чтобы увидеть, все ли закончено, и выйти из кода. Вы можете вручную вызвать 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));
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...