gpt4 book ai didi

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

转载 作者:太空宇宙 更新时间:2023-11-04 02:53:58 25 4
gpt4 key购买 nike

我的 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/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com