繁体   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