2

我发现自己多次写这个:

{ someJQueryCallback: ->
    keepGoing = true
    $(someSelector).each ->
      unless someCondition($(@))
        keepGoing = false
        return false
    return false unless keepGoing
    moreStuff()
}

当然,第一次,我犯了大家都会犯的菜鸟错误:

{ someJQueryCallback: ->
    $(someSelector).each -> return false unless someCondition($(@))
    moreStuff()
}

啊,函数漂亮语法的危险。作为一个菜鸟,我忘记了在那个范围内,return会退出each而不是退出someJQueryCallback。但实际上,即使我现在“开明”了,这仍然是我想写的代码。我想以某种方式指定“弹出堆栈,直到您从someJQueryCallback. 初始化、设置和检查bool标志很烦人。它增加了杂物。有没有一种惯用的方法来return以这种方式提高调用堆栈?

4

1 回答 1

1

我不使用coffeescript,所以这可能并不完美,但希望它能给你一个想法:

{ someJQueryCallback: ->
    try
      $(someSelector).each ->
          throw new Error("STOP!") unless someCondition($(@))
        moreStuff()
    catch error
      return false;
}
于 2013-09-14T01:50:13.523 回答