我在JS应用程序中使用异步函数,这些函数包装有接收回调输入的我自己的函数。当我调用回调函数时,是否需要使用“ return”关键字?有关系吗?有什么不同?
例如:
var getData = function(callback){ // do some aysnc db stuff... return callback(results); // or just callback(results); }
PS:我正在使用javascript编写混合移动应用。
如果只有一条路径通过函数,则可以将两种形式互换使用。当然,该函数的返回值将在没有返回的情况下是不确定的,但是您的调用代码可能仍未使用它。
没错
return callback()
实际上相当于
callback(result); return;
后者的确在调用堆栈上导致了额外的帧,因此使用了更多的资源。我想如果您有许多嵌套的回调,或者正在执行递归,那么您将更快地耗尽堆栈空间。
这可能是一个坏主意,我不认为我在说回调之前的返回更加惯用了。
如果函数中有多个路径,则必须小心。例如,这将按预期工作:
(cb)=> { if (something) cb('a') else cb('b') }
但是,在这种情况下,两个回调都将被调用。
(cb)=> { if (something) cb('a'); cb('b') }
当您阅读以上内容时,很明显两者都会被调用。然而,编写这样的代码是一个经典的节点新手错误(尤其是在处理错误时)。如果要执行或要执行,则需要:
(cb)=> { if (something) return cb('a'); cb('b') }