【发布时间】:2013-05-10 08:19:54
【问题描述】:
在 CoffeeScript 的 Node/Express 服务器中,我有以下功能:
@resolveServers = (url, servers, answer) ->
result = []
treatServer(url, server, (treatAnswer) ->
result.push(treatAnswer)
) for server in servers
answer(result)
treatServer 方法需要一些时间,并且在循环完成之前发送答案。只有在循环结束时才能发送结果?
感谢您的帮助。
【问题讨论】:
-
一个简单的解决方案是维护一个本地计数器。
var count = servers.length,然后在回调内部,if (--count === 0) answer(result); -
你检查过节点的任何异步库吗? github.com/caolan/async 可能会有所帮助。
-
Squint:您的提示有效,但我更喜欢 TheHippo 的回答方式。 Aaron:Node 提供原生异步。不过谢谢。
-
你的意思是增加而不是减少?当然,这也行。 @AaronDufour 谈论的库是用于管理 异步活动。除非我错过了,否则 NodeJS 不会提供类似的东西。
-
@brnrd 斜视是对的。它用于管理异步任务 - 以串行、并行、forEach 等方式运行它们,并在一切完成后自动调用最终回调。
标签: javascript node.js express coffeescript