假设我有一个像这样的简单函数:
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
键关闭函数之外,还有更好的方法吗?
答案 0 :(得分:2)
没关系,这就是Coffeescript的工作原理,它总是返回函数的最后一个表达式,除非你用undefined
或其他东西返回return
。
答案 1 :(得分:1)
如果您想从匿名函数返回"hello #{user.name}"
并且不从foo
返回任何内容,则只需执行以下操作:
foo = ->
User.findById someId, (err, user) ->
"hello #{user.name}"
return
请注意,最有可能的是,您无法访问回调(匿名函数)的返回值。回调由findById
函数调用,此函数很可能会丢弃回调的返回值。
另外,原则上,函数返回一个奇怪的值并不重要,只要它从未使用过。如果要创建一个非常干净的API,您只需要在函数体的最后一行放置显式return
或undefined
。