记一次需要多次调用接口,以防接口数据丢失的写法

问题场景:

在项目中存在一些接口调用量比较巨大,超时获取其他异常情况频率比较高。且处理线上Case这些数据又比较重要。在业务方无法保证数据请求的准确性的情况下。要判断其在空或者抛出异常情况下,对接口多次请求,保证数据一定要请求成功。

原本简单实现方式:

for (int count = 0; count < 3; count++) {
    Map<String, String> tmp = 调用请求方法;
    if (tmp != null) {
        result = tmp;
        break;
    }
}

从上面方法可以看出,如果有其他的方法也出现类似情况,简单实现方法还是采用这种for循环的方式,实现重复代码,建立for循环代码。

推荐方法:可以单独建立一个类,该类专门用来实现循环调用情况。将实现方法封装成一个类进行调用实现:

public class RetryService {
    private static final Logger LOGGER = LoggerFactory.getLogger(RetryService.class);
    /**
     * 重复次数
     */
    private static final Integer TIMES = 3;

    /**
     * 为NUll情况下重复调用
     * @param callable
     * @param <T>
     * @return
     */
    public static <T> T retryGetForNull(Callable<T> callable) {
        T object = null;
        for (int i = 0; i < TIMES; i++) {
            try {
                object = callable.call();
                if (object != null) {
                    return object;
                }
            } catch (Exception e) {
                LOGGER.info("多次查询(null情况):", e);
            }
        }
        return object;
    }

    /**
     * 抛异常情况下重复调用
     * @param callable
     * @param <T>
     * @return
     */
    public static <T> T retryGetForException(Callable<T> callable) {
        T object = null;
        for (int i = 0; i < TIMES; i++) {
            try {
                return callable.call();
            } catch (Exception e) {
                LOGGER.info("多次查询(异常情况):", e);
            }
        }
        return object;
    }


}

 

在调用该方法时候采用:

result = RetryService.retryGetForNull(() -> 该实现方法);

好处:可以不用过多的采用重复代码,实现重复的功能。这仅仅是简单实现重复调用的情况下时候,在很多其他的业务场景下也可以采用类似方法,避免出现过多的重复代码。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Vue是一种基于JavaScript的前端开发框架,它支持组件化开发和数据驱动视图的方式。当一个接口出现多次调用,可以通过以下几种方式来处理: 1. 将接口调用抽象为一个独立的函数或方法,然后在需要调用接口的地方直接调用该函数或方法。这样可以避免多次重复的接口调用代码,提高代码的复用性和可维护性。 2. 使用Vue的计算属性来处理接口调用。计算属性会根据依赖的数据动态计算得出一个新值,并在数据更新自动重新计算。可以将接口调用作为依赖的数据,在计算属性中处理接口调用并返回结果。这样可以确保接口调用只执行一次,并且在数据更新自动重新调用接口。 3. 使用Vue的生命周期钩子函数来处理接口调用。将接口调用放在适当的生命周期钩子函数中,例如created钩子函数,在组件创建之后立即调用接口。这样可以确保接口调用只执行一次,并且确保在组件创建之后立即获取到接口数据。 4. 使用Vue的vuex状态管理来处理接口调用。将接口调用接口返回的数据存储在vuex的状态管理中,然后在需要使用接口数据的地方直接从vuex中获取。这样可以确保接口调用只执行一次,并且在整个应用中共享接口数据。 总之,对于一个接口出现多次调用的情况,我们可以通过抽象函数、计算属性、生命周期钩子函数或vuex状态管理等方法来处理,以提高代码的复用性和性能。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值