gpt4 book ai didi

javascript - 使用异步队列时应该使用回调吗?

转载 作者:行者123 更新时间:2023-11-30 12:18:40 24 4
gpt4 key购买 nike

我正在使用 async.js 的 queue,但我不确定是否应该一次处理一个任务。任务本身是发送到套接字的简单快速的消息。

process: (task, done) ->
task.client.send(task.model, done)

对比

process: (task, done) ->
task.client.send(task.model)
done()

最佳答案

正确答案是“视情况而定”。

done 回调必须在任务完成时在任务函数内部调用,以通知队列其结束。

task.client.send是一个异步操作,所以会在不久的将来完成。出于这个原因,有一个回调作为第二个参数,调用者可以使用它来了解发送操作何时完成。

如果对您来说,任务在发送请求结束时完成,您应该将 done 回调传递给 task.client.send,如下所示:

process: (task, done) ->
task.client.send(task.model, done)

如果对您而言,任务在发送操作开始时完成,您应该在 task.client.send 之后调用它,如下所示:

process: (task, done) ->
task.client.send(task.model)
done()

在这种情况下,可以认为任务在发送操作结束之前完成。

我在第二种情况下看到的缺点(在 send 调用之后调用 done 的情况)是您无法控制 发送调用。 Async.js queue 方法的默认并发级别是 1,因此在第二种情况下,send 调用在前一个调用之前执行被终止。因此,所有 send 请求可以同时启动,您不能对其进行限制。

在第一种情况下(done 作为 send 的第二个参数)你可以更好地控制 send 请求并且可以控制级别使用 queue 第二个参数的并行性 (concurrency)。

关于javascript - 使用异步队列时应该使用回调吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31693665/

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