Tos*_*shi 3 ruby error-handling
我使用 stripe 作为支付处理器。
在应用程序中,我向 Stripe 发送请求以执行收费或其他类型的流程,并且基本上使用如下所示的相同错误处理样板。
rescue Stripe::InvalidRequestError => e,
# do something
rescue Stripe::AuthenticationError => e,
# do something
rescue Stripe::APIConnectionError => e,
# do something
rescue Stripe::StripeError => e
# do something
rescue => e
# do something
end
Run Code Online (Sandbox Code Playgroud)
虽然我可以肯定rescue每个 API 调用中的每种错误类型,但这是很多样板代码,我很乐意只rescue处理所有这些错误类型,然后构建一个方法来执行日志记录、发送通知等操作。
我怎样才能以一种更干净的方式将它们捆绑到一个异常处理程序中(让事情变得干燥),如下所示?
def call
plan = Plan.new(attrs)
return plan unless plan.valid?
begin
external_card_plan_service.create(api_attrs)
rescue Exceptions::Stripe => e
plan.errors[:base] << e.message
return plan
end
plan.save
plan.update(is_active: true, activated_at: Time.now.utc)
plan
end
Run Code Online (Sandbox Code Playgroud)
不太确定do something每种情况是否相同。如果没有,这可能会满足您的要求:
def handle_stripe_errors
yield
rescue Stripe::AuthenticationError => e,
# do something
rescue Stripe::APIConnectionError => e,
# do something
rescue Stripe::StripeError => e
# do something
rescue => e
# do something
end
handle_stripe_errors do
external_card_plan_service.create(api_attrs)
end
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
401 次 |
| 最近记录: |