5

これが私が見たいものです:

kango.invokeAsync('kango.storage.getItem', 'item1', function(returned1) {
    kango.invokeAsync('kango.storage.getItem', 'item2', function(returned2) {
        alert(returned1 + returned2);
    });
});

これが私がcoffeescriptに書いたものです:

kango.invokeAsync 'kango.storage.getItem', 'item1', (returned1) ->

  kango.invokeAsync 'kango.storage.getItem', 'item2', (returned2) ->

    alert returned1 + returned2

ここでの問題は、何があっても、coffeescript が関数 ()-> に何かを返させることです。その場合、何らかの理由で最後のステートメントが返されています。

return2 を使用してネストされた関数に 2 番目のアラートを配置すると、最初のアラートの代わりに返されます。

kango.invokeAsync('kango.storage.getItem', 'item1', function(returned1) {
    kango.invokeAsync('kango.storage.getItem', 'item2', function(returned2) {
      alert(returned1 + returned2);
      return alert('something');
    });

返品をしないようにする方法は?

4

2 に答える 2

11

関数が何かを返したくない場合は、次のように言ってreturnください。

kango.invokeAsync 'kango.storage.getItem', 'item1', (returned1) ->
  kango.invokeAsync 'kango.storage.getItem', 'item2', (returned2) ->
    alert returned1 + returned2
    return

returnCoffeeScriptでもJavaScriptと同じように動作するためreturn、特定の戻り値が必要ないかどうかを判断できます。

を使用して明示的な戻り値を指定しない場合return、CoffeeScript関数は最後の式の値を返すため、CoffeeScriptは次のようになります。

kango.invokeAsync 'kango.storage.getItem', 'item1', (returned1) ->
  kango.invokeAsync 'kango.storage.getItem', 'item2', (returned2) ->
    return alert returned1 + returned2

結果は同じになりますが、alert何も返されません。

f = ->
    alert 'x'
    return
x = f()

屈服しますundefinedx、これもそうします:

f = -> alert 'x'
x = f()
于 2013-01-06T00:37:25.413 に答える
2

coffeescript では、関数は常に最後のステートメントを返します。undefinedそれを最後のステートメントにすることで、関数を明示的に返すことができます。

kango.invokeAsync 'kango.storage.getItem', 'item1', (returned1) ->

  kango.invokeAsync 'kango.storage.getItem', 'item2', (returned2) ->

    alert returned1 + returned2
    `undefined`
于 2013-01-06T00:20:44.757 に答える