configSource не работает в system.serviceModel *или* его подразделы

В вашей функции обещания sendMessage разрешение должно быть внутри обратного вызова функции sendMail, поскольку оно асинхронное.

    transporter.sendMail(mailOptions, function(error,info){
       resolve();
    });

ОБНОВЛЕНИЕ

Асинхронная работа иногда становится очень сложной, особенно если вы привыкли к синхронным процессам. Когда я начал заниматься программным обеспечением, это привело меня в замешательство.

Вы обещаете, что функции хороши. Проблема заключалась в том, что вы решали функцию отправки до того, как она действительно выполнила свою работу.

Итак, ниже приведена более простая версия вашего кода. Делая то же самое, что вы сделали

// function that returns a message
// duration: 1s
function getMessage() {
    return new Promise(resolve => {
      setTimeout(() => resolve('important message'), 1000)
    });
}

// function that send a message using sendEmail function
// duration should be based on sendEmail
// notice that the resolve is called inside the callback
function sendMessage(message) {
    return new Promise((resolve, reject) => {
       sendEmail(message, (err, result) => {
           // do some stuff if email was sent
       })
       resolve();
    });
}

// function try to send an email asynchronously using a callback
// duration: 0.5s
function sendEmail(message, callback) {
    setTimeout(() => {
        console.log('email sent!')
        callback(null, 'message sent');
    }, 500)
}

getMessage().then(result => {
    return sendMessage(result);
}).then(() => {
    console.log('should be done after email')
})

С помощью приведенного выше кода ваш терминал должен показать

should be done after email
email sent!

Но с некоторыми изменениями в функции sendMessage

function sendMessage(message) {
    return new Promise((resolve, reject) => {
       sendEmail(message, (err, result) => {
            resolve(result);
       })
    });
}

терминал теперь должен показывать

email sent!
should be done after email
33
задан Rikin Patel 27 July 2016 в 11:20
поделиться

3 ответа

Редактор VS.NET жалуется на конфигурацию, но она работает.

У меня такая конфигурация ...

<system.serviceModel>
  <behaviors configSource="config\system.servicemodel.behaviors.config" />
  <bindings configSource="config\system.servicemodel.bindings.config" />
  <client configSource="config\system.servicemodel.client.config" />
</system.serviceModel>

... что отлично работает.

66
ответ дан 27 November 2019 в 17:38
поделиться

Он НЕ будет работать с , так как это конфигурация SectionGroup, а не конфигурационная секция.

It БУДЕТ отлично работать во время выполнения на чем-либо ниже - мы делаем это постоянно. Ответ Мартина прекрасно это показывает - его образец будет работать.

24
ответ дан 27 November 2019 в 17:38
поделиться

Одна вещь, о которой следует помнить при перемещении разделов конфигурации в отдельные файлы: убедитесь, что ваш отдельный файл конфигурации НЕ содержит атрибут configSource. Например, если вы разделите свой раздел привязок таким образом,

<system.serviceModel>
    <bindings configSource="yourConfigFile.config" />
</system.serviceModel>

убедитесь, что ваш фактический файл привязок не содержит атрибута «configSource»:

<?xml version="1.0" encoding="utf-8"?>
<bindings>
    <!-- binding configuration stuff -->
</bindings>

Я знаю, что это может показаться очевидным, но если вы введете configSource атрибут, а затем вырезать и вставить в новый файл, легко забыть удалить атрибут.

Надеюсь, это поможет.

6
ответ дан 27 November 2019 в 17:38
поделиться
Другие вопросы по тегам:

Похожие вопросы: