如何在继续主函数之前获得回调函数的结果?

时间:2013-03-30 15:43:44

标签: node.js callback coffeescript request

我使用递归函数来构造包含(URL,子项,数据)的JSON数据。我将此数据发送到我的图表(RGraph库)以创建它。问题是在我的函数中creer_json = (url, nom, recursif, recursif_max)我遇到了问题。这是代码:

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数据。 主函数继续没有@tab的结果,我需要那些数据!我的问题可能不明确,所以如果你不理解,请不要犹豫,问我。提前感谢您的时间。

1 个答案:

答案 0 :(得分:0)

正如Eru所写:如果你需要异步调用的结果,你必须继续回调。您无法重新同步异步调用。这也意味着您无法从creer_json返回任何有用的内容。相反,如果需要返回值,则必须添加一个回调参数,该参数获取传递的返回值。更重要的是,由于creer_json将成为异步函数并且您以递归方式调用它,因此这些递归调用需要使用回调。