我在我的JS应用程序中使用异步函数,该函数包含我自己接收回调输入的函数。当我调用回调函数时,是否需要使用“return”关键字?有关系吗?差异是什么?
例如:
var getData = function(callback){
// do some aysnc db stuff...
return callback(results);
// or just
callback(results);
}
PS:我正在使用javascript编写混合移动应用程序。
答案 0 :(得分:3)
不,回调不应与返回一起使用。
我永远不会期望回调函数返回一个值。
当(异步)计算完成时,回调在传递值方面替换了返回。
您可以使用此语法return callback(result)
作为类似callback(result); return;
的快捷方式,但它可能会混淆其他一些团队成员,可能返回什么样的值回调。
这实际上是你的minifyer的任务,创建这样的代码;不是你的。
答案 1 :(得分:0)
如果您只有一条通过功能的路径,那么您可以互换使用这两种形式。当然,函数的返回值在没有返回的情况下是未定义的,但是你的调用代码可能还没有使用它。
这是真的
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')
}
答案 2 :(得分:0)
你不必,但如果你不使用'return',你可能会遇到麻烦。例如,如果您不习惯早期退货,错误处理可能会成为问题。举个例子:
var getData = function(callback){
dbStuff(function(err, results) {
if (err) { callback(err, null); }
callback(null, results);
});
}
我一般认为在你完成后返回是一种好习惯......
var getData = function(callback){
dbStuff(function(err, results) {
if (err) { return callback(err, null); }
return callback(null, results);
});
}
但是你可以用if / else块和没有return语句来完成同样的事情。