【问题标题】:How to get the result of a callback function before continuing the main function?在继续主函数之前如何获取回调函数的结果?
【发布时间】:2013-03-21 03:56:43
【问题描述】:

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

【问题讨论】:

  • main函数应该作为getTab函数的回调来执行

标签: node.js callback coffeescript request


【解决方案1】:

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

【讨论】:

    猜你喜欢
    • 2021-09-11
    • 1970-01-01
    • 2011-08-16
    • 2020-03-13
    • 1970-01-01
    • 2020-03-01
    • 1970-01-01
    • 2021-08-22
    • 1970-01-01
    相关资源
    最近更新 更多