1

我使用递归函数来构造包含(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 的结果的情况下继续,我需要该数据!我的问题可能不清楚,所以如果您不明白,请随时问我。提前感谢您的宝贵时间。

4

1 回答 1

0

正如 Eru 所写:如果您需要异步调用的结果,则必须在回调中继续。您无法重新同步异步调用。这也意味着您不能从creer_json. 相反,如果您需要返回值,则必须添加一个回调参数来获取传递的返回值。更重要的是,由于creer_json将成为一个异步函数并且您递归调用它,因此这些递归调用需要带有回调。

于 2013-05-24T19:00:41.167 回答