Останавливает ли функция обработку, когда из нее вызывается другая функция? - PullRequest
1 голос
/ 18 декабря 2010

Посмотрите на следующую функцию в CFC (я использую ColdFusion 9).

Предполагая, что oldObject is true и it is type 1, ColdFusion продолжается до конца функции исоздать новый объект или он «вылетает» на <cfset respond(result=false)> и прерывает любую дальнейшую обработку в функции?

<cffunction name="myFunction" access="private">

   <cfargument name="key">

   <cfset oldObj = model("myModel").findOne(arguments.key)>
   <cfset local.data = 1>

   <cfif isObject(oldObj)>

      <cfif oldObj IS 1>
         <cfset respond(result=false)>
      <cfelse>
         <cfset local.data = 2>
      </cfif>

   </cfif>

   <cfset newObj.new(local.data)>

<cffunction>

Идея такова:

  1. Если oldObject (1) существует, а (2) имеет тип 1, вылетает и ничего не делает.
  2. Если oldObject существует и НЕ имеет тип 1, измените local.data и создайте новый объект.
  3. Если oldObject не существует, просто создайте новый объект с неизмененным local.data.

Функция response () просто возвращает данные пользователю через структуру JSON.Я опустил много кода, так как это теоретический вопрос.

1 Ответ

2 голосов
/ 18 декабря 2010

Ваш алгоритм продолжается до конца функции. Только <cfreturn> может выйти из функции до конца. Так что <cfset newObj.new(local.data)> всегда будет достигнуто.

Чтобы вывести JSON inline (т.е. <cfoutput>#json#</cfoutput>.), Убедитесь, что respond() не указывает <cffunction name="respond" output="false" ...>.

Обратите внимание, что если предположить, что объект большего размера, в котором находятся эти функции, является состоящим из состояния, то более понятный подход заключался бы в использовании соответствующих методов вызова клиента. Пусть объект внутренне объединяет ответ как часть его состояния. И, наконец, клиент вызывает что-то вроде getResponse() функции.

...