javascript - 我应该在 Javascript 的回调函数中使用 '' return"吗?

标签 javascript angularjs asynchronous callback

我在我的 JS 应用程序中使用异步函数,并使用我自己的函数来接收回调输入。当我调用回调函数时,我需要使用“return”关键字吗?有关系吗?有什么区别?

例如:

var getData = function(callback){
    // do some aysnc db stuff...
    return callback(results);
    // or just
    callback(results);
}

PS:我正在使用 javascript 编写混合移动应用程序。

最佳答案

如果您的函数只有一条路径,那么您几乎可以互换使用这两种形式。当然,如果没有 return,函数的返回值将是未定义的,但您的调用代码可能并没有使用它。

这是真的

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')
}

关于javascript - 我应该在 Javascript 的回调函数中使用 '' return"吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34706848/

相关文章:

javascript - 关闭编译器 : adding prefix to obfuscated variables

javascript - Node.js fs ENOENT 错误

java - Android java客户端程序使用单独的线程进行套接字IO,找不到使用按钮发送数据的方法

javascript - 如何在功能上加入延迟?

javascript - CakePhp3 - 在 ChartJs 上显示值

javascript - 我可以为每个编辑器分别在 textAngular 中设置编辑器的高度吗?

c# - SSIS C# 异步 SQL 查询挂起(包括执行存储过程)

ios - 在执行 AFNetwork 请求之前执行 UI 更改

javascript - 从一个域的 HTML 页面到另一个域的追加/插入按钮

javascript - 仅在 dom 中禁用该属性的情况下选择元素