循环结束后如何发送函数的结果? [英] How to send result of a function after the loop is finished?

查看:166
本文介绍了循环结束后如何发送函数的结果?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

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

In a Node/Express server in CoffeeScript, I have the following function :

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

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

The treatServer method take some times, and the answer is send before the loop is finish. How can I send the result only when the loop is come at an end ?

感谢您的帮助。

推荐答案

只要事先知道服务器数量,这很容易:

It is easy as long as you know the number of servers beforehand:

@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

再次思考之后。在你的情况下,这可以更容易解决:

After thinking about it again. In your case this could be solved even easier:

@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返回数组的长度:

Edit 2: As squint pointed out, that push returns the length of the array:

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

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

If you want to maintain readability of the code, the last edit might not be the best choice ;-)

这篇关于循环结束后如何发送函数的结果?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆