Почему код после cfreturn не выполняется в CFC?

Я создал CFC для обработки и возврата комментариев, размещенных на странице отправки. Он просто возвращает строку JSON комментария, сделанного обратно в браузер, который затем вставляется в DOM с помощью jQuery.

Однако я также хочу отправить электронное письмо, чтобы уведомить автора о том, что был опубликован новый комментарий. Я хочу сделать это ПОСЛЕ того, как JSON будет возвращен в браузер, потому что это ускорит пользовательский интерфейс, а не будет ждать отправки электронного письма перед обновлением DOM.

В настоящее время я тестирую это и не вижу, чтобы ColdFusion выполнял что-либо после тега <cfreturn>. Например, у меня не работает следующее:

<cffunction>
....
<cfreturn NewComment/>
<!--- Anything after the cfreturn above doesn't seem to get executed --->
<cfmail to="[email protected]" from="[email protected]">
A new comment is available for you to read
</cfmail>
</cffuntion>

Однако это работает:

<cffunction>
....
<cfmail to="[email protected]" from="[email protected]">
A new comment is available for you to read
</cfmail>
<cfreturn NewComment/>
</cffuntion>

Что с этим делать и как я могу добиться того, что я пытаюсь сделать? Если бы я хотел сделать намного больше, чем просто отправить электронное письмо, то DOM пришлось бы ждать значительное количество времени, прежде чем обновляться, что делает работу пользователя вялой.


person volume one    schedule 01.10.2016    source источник
comment
Ответ сервера отправляется клиенту только после полной обработки шаблона. Вы можете очистить выходной буфер раньше, используя <cfflush>, но ваш подход больше похож на работу для <cfthread>.   -  person Alex    schedule 01.10.2016
comment
Алекс прав, вы должны изучить cfthread, который позволяет вам асинхронно выполнять код на сервере, не задерживая исходный поток. Другим вариантом было бы поместить запись в таблицу базы данных, и запланированная задача отправит фактическое электронное письмо через несколько минут.   -  person Brad Wood    schedule 02.10.2016


Ответы (1)


Возврат завершает обработку функции. Все, что после возврата, не обрабатывается.

person Evik James    schedule 01.10.2016