我正在尝试找出如何创建可以执行异步响应的Rails API。文章和教程下面的许多评论都说:
那
throw :async
让我感到害怕
throw :async
让我难过
显然使用throw :async
被认为是不好的做法,但我还没弄清楚原因。
所以如果有人解释我为什么这么糟糕,有什么替代方法等等,我会很感激。
答案 0 :(得分:3)
人们正在发表评论:
那
throw :async
让我感到害怕
因为使用throw
类似于编写GOTO。
这是一个big topic讨论/辩论,但简短的回答是GOTO
通常不赞成“结构糟糕”的代码。
总是可以在没有GOTO
的情况下解决编程问题,并且在代码中看到它们通常表示会导致问题的黑客攻击。
以下是在ruby代码中使用throw
的示例:
def my_method
catch(:escape) do
outer_list.each do |item1|
inner_list.each do |item2|
throw :escape if item2 == "something"
end
end
puts "something was not found"
return
end
puts "something was found!"
end
上述throw
需要打破嵌套循环......但是正如您所希望看到的,有一种更简单/更简洁的方式来编写上述代码。 / p>
当你的设计薄弱时,GOTO是一种微弱的出路。
反对GOTO
的两个最常用的参数可能是代码更难以理解,并且有更多方法可以达到代码中的特定点。
这并不意味着您永远不会使用throw
语句 - 但仅仅是因为它们通常是气馁的,如果您发现自己需要它们,您应该仔细考虑您的设计。