2013-03-30 2 views
1

재귀 함수를 사용하여 (URL, children, data)를 포함하는 JSON 데이터를 생성합니다. 이 데이터를 그래프 (RGraph 라이브러리)에 보내서 만듭니다. 문제는 내 함수에서 creer_json = (url, nom, recursif, recursif_max)에 문제가 있다는 것입니다.main 함수를 계속하기 전에 콜백 함수의 결과를 얻는 방법?

creer_json = (url, nom, recursif, recursif_max) -> 
recursif-- 
resultat = {} 
@tab = [] 
tableau = getBody(url,(error,message) -> 
    @tab = getTab(message.body)) 
tab_children = [] 
tab_relation = [] 
indice = 0 
id_enfant = 1 
adresse = "<h1>Liens de "+url+"</h1>" 
while indice < tab.length 
    if (recursif == recursif_max-1) 
     id_urlfils = id_enfant 
    else 
     id_urlfils = nom+"."+id_enfant 
    adresse = adresse+" "+"<li>"+id_urlfils+" : "+"<a href="+tab[indice]+">"+tab[indice]+"</a></li>" 
    indice++ 
    id_enfant++ 
tab_relation.push("<ul>"+adresse+"</ul>") 
id_url = 1 
i = 0 
while i < tab.length 
    if (recursif == recursif_max-1) 
     id_urlfils = id_url 
    else 
     id_urlfils = nom+"."+id_url 
    if recursif >= 0 
     json2 = creer_json(tab[i], id_urlfils, recursif, recursif_max) 
     tab_children.push(json2) 
    i++ 
    id_url++ 
resultat = 
    id : nom 
    name : nom 
    children : tab_children 
    data : { relation: tab_relation } 
return resultat 

내 문제는 내가 주요 기능을 계속 네 번째 명령의 결과를 필요로한다 : 여기 코드는

tableau = getBody(url,(error,message) -> 
    @tab = getTab(message.body)) 

@tab이 웹 사이트의 모든 URL을 포함하고 난 루프가 그들에게 JSON 데이터를 작성하십시오. main 함수는 @tab의 결과없이 계속 진행되고 그 데이터가 필요합니다! 내 문제는 명확하지 않을 수 있으므로 이해하지 못하면 저에게 묻기를 주저하지 마십시오. 시간 내 미리 감사드립니다.

+1

main 함수는'getTab' 함수의 콜백으로서 실행되어야합니다 – Eru

답변

0

Eru 님이 작성했습니다 : 비동기 호출 결과가 필요하면 콜백을 계속해야합니다. 비동기 호출을 다시 동기화 할 수 없습니다. 이는 creer_json에서 유용한 것을 반환 할 수 없다는 것을 의미합니다. 대신 반환 값이 필요한 경우 전달 된 반환 값을 가져 오는 콜백 매개 변수를 추가해야합니다. 게다가 creer_json이 비동기 함수가되어 재귀 적으로 호출하기 때문에 이러한 재귀 호출은 콜백을 사용해야합니다.

관련 문제