【问题标题】:How to avoid this return in nested coffeescript?如何避免嵌套咖啡脚本中的这种返回?
【发布时间】:2013-01-06 08:37:25
【问题描述】:

这是我想看到的:

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 放置第二个警报,它将返回而不是第一个:

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

如何让它避免退货?

【问题讨论】:

标签: javascript jquery coffeescript


【解决方案1】:

如果您不希望函数返回某些内容,那么只需说 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()

【讨论】:

  • 谢谢,这正是我所需要的。它似乎让人想起 def ... ruby​​ 的结尾,除了它是 return 而不是 end。
【解决方案2】:

在coffeescript 中,函数总是返回最终语句。您可以明确地让函数返回 undefined,方法是将其作为最终语句。

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

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

    alert returned1 + returned2
    `undefined`

【讨论】:

  • 或者他可以返回返回1 +返回2并从外面提醒他们
  • 这可能是真的。我认为 OP 可能对如何“不返回”某些东西的一般问题感兴趣。
猜你喜欢
  • 2017-03-12
  • 2013-03-06
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-11-14
  • 2012-09-03
  • 1970-01-01
  • 2020-05-22
相关资源
最近更新 更多