Я недавно пробовал Dust.js, потому что он поддерживает асинхронные помощники, но я нашел случай, когда это не так.Асинхронные самозакрывающиеся помощники с Dust.js
К примеру, учитывая следующий шаблон Dust:
<ul>
{#getResults}
<li>{#isResultNew"}*New*{/isResultNew} {message}, {#formatResultDate format="d/m/y" /}</li>
{/getResults}
</ul>
Если formatResultDate
помощник является синхронным, то это не проблема, я могу выписать дату:
function formatResultDate(chunk, context, bodies, params) {
...
return chunk.write(value)
}
Однако, если шаблон были асинхронными - используя обещание - тогда ничего не будет выдано:
function formatResultDate(chunk, context, bodies, params) {
...
return Promise.resolve(date).then(value => chunk.write(value))
}
Я могу обойти это ограничение, поставив тело тега ({#formatResultDate format="d/m/y"}{.}{/formatResultDate}
), но это не совсем то, что я ожидал.
Я знаю, что асинхронные самозакрывающиеся теги могут быть невозможны; вникая в исходный код, я нашел this comment, но я не совсем понимаю, что это значит, и я еще не нашел никаких дальнейших объяснений в документации или поиске.
Из того, что я прочитал в коде пыли, попробуйте просто «вернуть обещание.Разрешить (date) "вместо" return Promise.resolve (date) .then (value => chunk.write (value)) ".' reference', кажется, повторно входит и достигает https://github.com/linkedin /dustjs/blob/3fc12efd153433a21fd79ac81e8c5f5d6f273a1c/dist/dust-core.js#L762 с результатом обещания (я не являюсь пользователем пыли) –