如果不执行callback()怎么办?

时间:2016-07-23 17:26:29

标签: javascript asynchronous callback

我有一个简单的问题,但无法在网上找到任何答案。

在javascript函数中,其参数中有回调函数,必须内部总是有callback()吗?如果callback()有时只执行,可能会出现任何性能问题吗?

function do_this(param1, callback) {
    param1.forEach(function(param) {
       io.sockets.connected[param].emit('do this', function(res) {
           if (res) callback();
       });
    });
}

请注意,在此代码中,不应始终调用callback()。运行此功能时出现的任何潜在性能问题都会导致功能do_this()的多次调用无法返回回调?

2 个答案:

答案 0 :(得分:1)

不,仅针对逻辑问题。

如果不调用回叫,则意味着您的程序将无法知道它的调用会发生什么,但是关于性能,在您的示例中,在您获得emit回调后,而不是调用您的回调,功能将丢失最后一个链接,将成为垃圾收集器的食物,所以实际上它将被遗忘,并没有正式的性能影响。

但更好的是仍然使用一些结果信号,比如当我们有一个规则时 - 如果函数返回条件,它应该返回其他没有条件的东西,只是为了更好地理解数据流。

使用Promises并最好始终解决/拒绝它们,否则您将无法确定程序状态。

最后 - 它会起作用但更好地避免这种模式。

答案 1 :(得分:0)

感谢您的回复。

我最终使用异步库实现了代码只是为了在callback的末尾发出for..loop,但我很好奇是否另一种方式暗示了任何性能损失。