在 CoffeeScript 的 Node/Express 服务器中,我有以下功能:
@resolveServers = (url, servers, answer) ->
result = []
treatServer(url, server, (treatAnswer) ->
result.push(treatAnswer)
) for server in servers
answer(result)
treatServer 方法需要一些时间,并且在循环完成之前发送答案。如何仅在循环结束时发送结果?
感谢您的帮助。
最佳答案
只要你事先知道服务器的数量,这很容易:
@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指出,push 返回数组的长度:
@resolveServers = (url, servers, answer) ->
result = []
treatServer(url, server, (treatAnswer) ->
answer result if result.push(treatAnswer) is servers.length
) for server in servers
如果您想保持代码的可读性,最后一次编辑可能不是最佳选择;-)
关于javascript - 循环结束后如何发送函数结果?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16570507/