gpt4 book ai didi

ruby - 干燥重复的救援声明

转载 作者:数据小太阳 更新时间:2023-10-29 07:44:49 26 4
gpt4 key购买 nike

我使用 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

虽然我绝对可以在每个 API 调用中rescue这些错误类型中的每一个,但这是很多样板代码,我很乐意对所有这些错误类型进行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

最佳答案

不太确定 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

关于ruby - 干燥重复的救援声明,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41709715/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com