循环结束后如何发送函数的结果?

时间:2013-05-15 16:36:08

标签: javascript node.js express coffeescript

在CoffeeScript的Node / Express服务器中,我有以下功能:

@resolveServers = (url, servers, answer) ->
  result = []
  treatServer(url, server, (treatAnswer) ->
    result.push(treatAnswer)
  ) for server in servers
  answer(result)

treatServer方法需要一些时间,并且在循环结束之前发送答案。如何在循环结束时才发送结果?

感谢您的帮助。

2 个答案:

答案 0 :(得分:2)

只要您事先知道服务器的数量就很容易:

@resolveServers = (url, servers, answer) ->
    result = []
    count = 0
    treatServer(url, server, (treatAnswer) ->
        result.push(treatAnswer)
        count++
        answer result if count is servers.length
    ) for server in servers

修改:再次考虑之后。在您的情况下,这可以更容易解决:

@resolveServers = (url, servers, answer) ->
    result = []
    treatServer(url, server, (treatAnswer) ->
        result.push treatAnswer
        answer result if result.length is servers.length
    ) for server in servers

编辑2:正如squint所指出的,该推送会返回数组的长度:

@resolveServers = (url, servers, answer) ->
    result = []
    treatServer(url, server, (treatAnswer) ->
        answer result if result.push(treatAnswer) is servers.length
    ) for server in servers

如果您想保持代码的可读性,最后一次编辑可能不是最佳选择; - )

答案 1 :(得分:0)

您还可以使用async模块

以下是精彩的文章Node.js async in practice: When to use what?,详细说明了异步。