在CoffeeScript的Node / Express服务器中,我有以下功能:
@resolveServers = (url, servers, answer) ->
result = []
treatServer(url, server, (treatAnswer) ->
result.push(treatAnswer)
) for server in servers
answer(result)
treatServer方法需要一些时间,并且在循环结束之前发送答案。如何在循环结束时才发送结果?
感谢您的帮助。
答案 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?,详细说明了异步。