javascript - 如何将函数转换为 async.each 函数

标签 javascript node.js express coffeescript

我的 Nodejs/express 服务器类中的函数有一个小问题。

我有以下功能:

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

由于治疗服务器功能可能会很狂野,正如question所暗示的那样我的,我正在考虑使用 async每个都为此。

所以我在这里:

@resolveServers = (url, servers, resolved) ->
  result = []
  async.each(servers, treatServer(url, server, (serverObject) ->
    result.push serverObject
        resolved result if result.length is servers.length
  ), (err) ->
    if err 
      console.log next err
  )

我目前收到以下错误:

ReferenceError: server is not defined

treatServer 函数需要 url 和服务器数组的服务器。 但我不知道如何为每个服务器获取此服务器实例,并将其传递给 treatServer 函数。

知道我做错了什么吗?

已经谢谢了。

更新:我有点失望,因为使用异步我没有任何收获。我使用的函数大约需要 6500 毫秒,异步函数是相同的。我猜 CoffeeScript 中的每个函数都很好地完成了它的工作。

更新:经过进一步测试,我发现该函数使用异步时速度较慢。真的很奇怪。

最佳答案

我想你想要async.map相反:它收集所有操作的结果并将它们作为数组传递给最终回调。它还维护输入数组的顺序,而 async.each 则不会(但这可能不是问题)。

@resolveServers = (url, servers, resolved) ->
  async.map(servers, (server, callback) ->
    treatServer(url, server, (serverObject) ->
      callback null, serverObject
    )
  , (err, result) ->
    if err 
      console.log next err
    resolved err, result // see text
  )

由于我的 CF 不太好,所以还有一个 JS 版本:

function resolveServers(url, servers, resolved) {
  async.map(servers, function(server, callback) {
    treatServer(url, server, function(serverObject) {
      callback(null, serverObject);
    });
  }, function(err, result) {
    if (err)
      console.log(err);
    resolved(err, result);
  });
}

我还建议遵循异步回调的常见 Node 习惯用法,其中第一个参数是错误对象(或 null 表示没有发生错误),第二个参数是结果值。这样,您就可以将错误一路传播回调用链。

关于javascript - 如何将函数转换为 async.each 函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16636279/

相关文章:

javascript - 我可以通过向 AngularJS 发送变量来更改加载哪个 JSON 文件吗?

javascript - 将 Active Class 添加到当前列表菜单项而不在 marko 中使用客户端 JS/jquery?

angularjs - 用angular js表达js重定向

node.js - 如果容器处于 CrashLoopBackOff 状态,如何执行到容器并查看文件

javascript - 当我使用静态站点时,如何使用 Express 处理路由?

javascript - 如何使用express返回数据响应?

javascript - 将 JSON 从 angular.js 发送到 node.js

Javascript 动态调用函数 - 返回未定义

javascript - Aptana 和 JavaScript/jQuery IDE

node.js - 在 NodeJS 中调试 websockets