2016-07-23 28 views
0

我有一种简单的问题,但在网上找不到任何答案。如果不执行回调(),该怎么办?

在一个带有回调参数的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()的许多呼叫时,任何潜在的性能问题都不会返回回调?

+1

性能问题?如果有一个控制流取决于正在执行的“回调”,那么它会停顿,但不会,没有性能问题。它看起来像是一个非常不一致的函数签名,考虑到它看起来像'callback'可能会执行0次或几次,具体取决于某些因素。 –

+0

传递参数不会影响你的表现。只有在传递函数参数时会使用额外的字节。 所以你很好走! –

回答

0

我不确定你可能会谈论什么样的性能问题:它会让其他方式更有意义(调用函数可能会很慢)。

所以,一个简单的答案是没有。如果传递的函数没有执行,那么完全没有性能影响(它肯定会更快,甚至)。

唯一的“不足之处”是当你没有真正需要的时候付出传递函数的代价,但那不是一个巨大的代价。

+0

可能值得提及一个控制流,它可能存在于内部,并且在执行'callback'的任何其他次数小于1时都会导致控制流中的意外行为,或者如果它未被执行导致其停止。 –

+0

没有任何东西告诉我多次调用回调是一个坏主意。 – Ven

+0

它在示例代码中并不是很明显,但请参阅“多个回调”一节[此处](http://caolan.github.io/async/) –

1

不,只发布逻辑。

如果回调函数不会被调用,这意味着你的程序将不能知道它的调用会发生什么,但是在你的示例中,在获得emit回调函数后的性能,而不是调用你的回调函数将失去最后一个环节,将成为垃圾收集者的食物,因此实际上它将被遗忘,并且没有正式的性能影响。

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

使用Promises和更好的总是解决/拒绝他们,否则你将无法确定程序状态。

所以最后 - 它会工作,但更好地避免这种模式。

0

谢谢你的回复。

我终于实现了使用异步库的代码,只是在for..loop的末尾发出callback,但我很好奇是否有其他方式牵连到任何性能损失。

相关问题