Ruby 的 Concurrent::Future 没有捕获异常。因此,我从 article 复制了代码来添加
rescue
块。
但现在我得到了错误:
由NoMethodError引起:#Concurrent::Future:0x0000000124764268的未定义方法“rescue”
这是代码:
executed_future = Concurrent::Future.execute do
url = "#{endpoint}#{datum[:hierarchy_id]}#{valuation_date}"
raise StandardError.new("Testing error!") # To test
[...]
end.rescue do | exception | # Adding this, will throw the error
@exceptions << exception
binding.pry # No activated
end
我错过了什么?
我希望能够拯救
Concurrent::Future
块中的异常。就像文章一样。
我不熟悉
Concurrent::Future
,我可能会错过该特定 gem 中存在 rescue
方法的不同实现。
但在 Ruby 中
rescue
不是您调用另一个方法的返回值的方法(就像问题中 Concurrent::Future.execute
调用的返回值)。它是一个关键字,用于捕获当前块上下文中引发的异常。
因此,我会尝试在
begin ... rescue ... end
块中使用惯用的 Ruby Concurrent::Future.execute
语法:
executed_future = Concurrent::Future.execute do
begin
url = "#{endpoint}#{datum[:hierarchy_id]}#{valuation_date}"
raise StandardError.new("Testing error!") # To test
# ...
rescue StandardError => exception
@exceptions << exception
binding.pry
end
end