Root Причина / Исправление:
Оказывается, это была проблема с указанным c winston-papertrail lib, который я использую, и именно поэтому он не вел себя как ожидается, даже с использованием блока .finally()
.
Примеры winston-papertrail
не использовали end()
, но нашли правильный синтаксис в вышеприведенных примерах Winston lib: https://github.com/winstonjs/winston/blob/73ae01f951600306242e00dd0d2b0a85b6d9d254/examples/finish-event.js#L28
Как только это было обнаружено, Мне удалось просто добавить его в блок .finally()
, и все работало нормально , как определено в принятом ответе
Исходное сообщение:
Речь идет конкретно о Javascript или, более конкретно, языках, которые не выполняют операции «по порядку» (asyn c)
Принимая этот сценарий, где logger.close()
операция должна выполняться после оператора logger.error()
...
({
//SomePromise
})
.then( //Then something else )
.then(function() {logger.close();})
.catch(err =>
{
logger.error(err);
logger.close();
})
С Javascript, это прекрасно работает с try / finally:
.catch(err =>
{
try {
logger.error(err);
}
finally {
logger.close();
}
})
Я новичок в асин c, обещания и т. Д. c и как с ними справиться (я парень Python).
Есть ли более идеальный способ сделать эту работу?
Мне не хватает важной концепции по этому поводу, или этот метод жизнеспособен и логичен?