0

假设我有一个这样的简单功能:

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

咖啡脚本将其翻译为:

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

所以由于某种原因这里有 2 个返回,但我只想在回调后返回“你好”。

我发现在使用它时不返回函数的唯一方法是用 a 关闭它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除了用键关闭函数之外,还有更好的方法吗?

4

2 回答 2

2

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

于 2013-10-19T20:56:02.687 回答
1

如果您想"hello #{user.name}"从匿名函数返回并且不返回任何内容foo,那么这样做就足够了:

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

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

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

于 2013-10-19T21:07:00.143 回答