coffeescript返回函数回调表现奇怪

时间:2013-10-19 20:52:57

标签: javascript coffeescript

假设我有一个像这样的简单函数:

foo ->  
  User.findById someId, (err, user) ->
    return "hello #{user.name}"  

coffeescript translate对此:

foo(function() {
  return User.findById(someId, function(err, user) {
   return "hello " + user.name;
  });
});

所以这里有两个返回因为某些原因,但我只想在回调后返回“你好”。

我使用它时发现不返回函数的唯一方法是使用return关闭它(这是一种奇怪的解决方法)。所以:

foo ->  
  User.findById someId, (err, user) ->
    return "hello #{user.name}"
  return 

将转化为:

foo(function() {
  User.findById(someId, function(err, user) {
    return "hello " + user.name;
  });
});

除了用return键关闭函数之外,还有更好的方法吗?

2 个答案:

答案 0 :(得分:2)

没关系,这就是Coffeescript的工作原理,它总是返回函数的最后一个表达式,除非你用undefined或其他东西返回return

答案 1 :(得分:1)

如果您想从匿名函数返回"hello #{user.name}"并且不从foo返回任何内容,则只需执行以下操作:

foo = ->  
  User.findById someId, (err, user) ->
    "hello #{user.name}"
  return 

请注意,最有可能的是,您无法访问回调(匿名函数)的返回值。回调由findById函数调用,此函数很可能会丢弃回调的返回值。

另外,原则上,函数返回一个奇怪的值并不重要,只要它从未使用过。如果要创建一个非常干净的API,您只需要在函数体的最后一行放置显式returnundefined