簡體   English   中英

如何在嵌套的coffeescript中避免這種返回?

[英]How to avoid this return in nested coffeescript?

這是我想看到的:

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正在使函數() - >返回一些東西。 在這種情況下,由於某種原因返回最后一個語句。

如果我使用returned2在嵌套函數中放置第二個警報,它將返回而不是第一個:

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

怎么讓它避免做回報?

如果你不想讓一個函數返回一些東西,那么只需說return

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

return在CoffeeScript中的行為與在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()

將在x給出undefined但是這樣:

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

在coffeescript中,函數始終返回最終語句。 您可以通過使最終語句顯式地使函數返回undefined

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

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

    alert returned1 + returned2
    `undefined`

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM