2014-07-18 2 views
2

전 cfthread를 사용하지 않았지만 다음 코드를 사용하고 있는데 작동하지 않습니다.coldfusion (railo) 및 예상대로 작동하지 않는 cfthread

<cfloop from="1" to="5" index="local.pageNo"> 

      <cfthread name="thr#local.pageNo#" threadIndex="#local.pageNo#" action="run"> 

       <cfif local.pageNo GT 1> 
        <cfhttp url="#local.apiURL#&page=#local.pageNo#" method="get" result="local.myResults" > 
        </cfhttp> 
        <cfset local.myResponse = deserializejson(local.myResults.filecontent)> 
       </cfif> 

       <cfloop from="1" to="#arrayLen(local.myResponse.result)#" index="i"> 
        <cfset local.apartmentList = listAppend(local.apartmentList,local.myResponse.result[i].id & '-0')> 
       </cfloop> 

      </cfthread> 

     </cfloop> 

     <cfthread action="join" name="thr1,thr2,thr3,thr4,thr5"/> 

local.apartmentList는 ID의 큰 목록이 될 것으로 예상되지만 비어있는 부분을 반환합니다. 마치 스레드 내의 코드가 그냥 건너 뛴 것처럼 보입니다. 아무도 내가 잘못하고있는 것을 발견 할 수 있습니까?

+1

이 코드는 실패 할 것으로 예상됩니다. 당신은 1..5를 반복하지만, 2 번째 반복 이후 부터만'local.myResponse'를 생성합니다. 그러나 나중에 항상 참조하는 것처럼 참조하십시오. – duncan

+0

응용 프로그램 및 예외 로그를 ​​@ 추천 할 수 있습니까? 그들은 그 (것)들에있는 당신의 과실이있을 것이다. –

답변

4

<cfthread>을 사용하는 경우 해당 태그 내의 코드는 주변 코드와 동일한 컨텍스트 내에서 실행되지 않습니다. 따라서 사용하려는 변수를 (<cfthread> 태그의 속성으로) 전달하거나 요청 범위를 통해 "공유"해야합니다.

따라서 <cfthread> 블록은 local.pageNo과 같은 변수를 알 수 없습니다.

처리 중 오류가 발생하면 <cfthread> 처리가 기록되므로 로그를보고 어떤 오류가 발생하는지 확인해야합니다.

+0

헤이 아담, 완벽한 대답. 나는 오류가 던져지고 있다는 것을 전혀 몰랐다. 방금 작성한 코드가 우회되고 있다고 가정했습니다. 로그를 검사했을 때 디버깅하기 쉬웠습니다. 환호 –

+0

나는 이것이 모든 사람을 처음으로 던졌습니다. 나는 실제로 이번 주에 실을 꿰매는 작업을하고 있는데, 그것은 단지 y/day로 나를 괴롭혔다 ;-) –

+0

내 관측은이 대답의 첫 단락에 동의하지 않게한다. 나는 cfthread를 사용했고 그렇게 할 때 주 스레드에서 형식 및 변수 범위의 변수에 액세스 할 수있었습니다. –