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

标签 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 方法需要一些时间,并且在循环完成之前发送答案。如何仅在循环结束时发送结果?

感谢您的帮助。

最佳答案

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

@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/

相关文章:

javascript - 具有双轴断点和拖动点的 Highcharts

node.js - npm 错误! tarball.destroy 不是函数

javascript - Express 中间件中的 Axios 出现错误 - 发送 header 后无法发送 header

javascript - 域和子域的不同 cookie

javascript - 从子进程中的 Promise.then 触发父进程中的 setState 函数

javascript - jQuery 模糊地换行。如何获得正确的html结果结构?

javascript - 下载 javascript 上的图像名称

node.js - 未解析的函数或方法 collection() - Firestore node.js

node.js - 如果缺少非必填字段,Mongoose 自定义验证器将失败

unit-testing - 如何执行涉及 redis、socket.io 和 nodejs/express 的单元测试?