let's say i have a simple function like that:
foo ->
User.findById someId, (err, user) ->
return "hello #{user.name}"
coffeescript translate it to that:
foo(function() {
return User.findById(someId, function(err, user) {
return "hello " + user.name;
});
});
so there are 2 returns here from some reason, but i just want to return the "hello" after the callback.
the only way i found not to return a function when i use it is by closing it with a return
(that is a weird workaround). so:
foo ->
User.findById someId, (err, user) ->
return "hello #{user.name}"
return
will translate into:
foo(function() {
User.findById(someId, function(err, user) {
return "hello " + user.name;
});
});
is there a better way to do that other than closing a function with a return
key?
If you want to return
"hello #{user.name}"
from the anonymous function and return nothing fromfoo
, it's sufficient to do:Note that most likely, the return value of the callback (the anonymous function) won't be accessible to you. The callback is called by the
findById
function, and this function most likely discards the callback's return value.Also, in principle, it doesn't matter if a function returns a weird value, as long as it's never used. You only need to put explicit
return
orundefined
on the last line of a function body if you want to create a really clean API.It's fine, that's how Coffeescript works, it always returns the last expression of a function unless you return
undefined
with an emptyreturn
, or something else.