0

私はそのような単純な機能を持っているとしましょう:

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

coffeescriptはそれを次のように翻訳します。

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の仕組みです。undefinedreturnの などで返さない限り、常に関数の最後の式を返します。

于 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 に答える