多个接口可以封装成一个接口处理

本文介绍了一种在开发中优化接口调用的方法,通过将多个相同返回结果的接口进行封装,减少代码冗余。示例展示了如何将针对不同场景的接口请求集中在`getList`和`getRequestHead`两个方法中,提高了代码复用性和可维护性。

在开发中会遇到这样的修求,可能一个页面会根据不同的情况会请求多个接口,返回一样的结果。如果各个接口分别编写一次,先的很搂,并且代码冗余。那么分装成一个方法来请求。
解决办法:其实就是将写一个方法,return请求接口,用另一个方法来接收结果

分装后的代码

import {saleDeptAnalysis,userAnalysis,contractIndustry} from '@/api/bi/customer'  //接口
/**
     * 查询表格数据,接口接口返回的数据
     * @param parmas
     */
    getList(parmas) {
      this.getRequestHead(parmas)
        .then(res => {
          if (res.code === 0) {
            this.tableData = res.data.list
          }
        })
    }
    
    /**
     * 设置请求接口
     * @param parmas
     */
    getRequestHead(parmas) {
      this.loading = true
      this.tableData = []
      if (parmas === 'sale') {
        return saleDeptAnalysis(this.listPostParams)
      } else if (parmas === 'employees') {
        return userAnalysis(this.listPostParams)
      } else if (parmas === 'contract') {
        return contractIndustry(this.listPostParams)
      }
    },

没有封装

 /**
     * 查询表格数据
     * @param parmas
     */
    getList(parmas){
      this.loading = true
      this.tableData = []
      if (parmas === 'sale') {
        saleDeptAnalysis(this.listPostParams)
          .then( res => {
            if (res.code === 0) {
              this.tableData = res.data.list
            }
          })
      } else if (parmas === 'employees') {
        this.listPostParamsif (parmas === 'employees')
        userAnalysis(this.listPostParams)
          .then( res => {
            if (res.code === 0) {
             this.tableData = res.data.list
            }
          })
      } else if (parmas === 'contract') {
        contractIndustry(this.listPostParams)
          .then( res => {
            if (res.code === 0) {
             this.tableData = res.data.list
            }
          })
      }
    },
### 将STM32按键触发外部中断PB0的功能封装一个模块 将STM32的按键触发外部中断功能封装一个模块,可以提高代码的可维护性和可重用性。通过模块化设计,可以将GPIO配置、中断配置、NVIC配置以及中断回调函数统一管,使得主程序更加简洁、清晰。 #### 模块设计思路 1. **GPIO初始化**:将PB0配置为外部中断输入模式,并设置为下降沿触发。 2. **EXTI配置**:将GPIOB的PB0引脚映射到EXTI0,并启用中断。 3. **NVIC配置**:设置中断优先级并启用中断。 4. **中断处函数**:在模块内部实现中断服务函数,并调用用户定义的回调函数。 5. **用户接口**:提供初始化函数和回调注册函数,允许用户自定义中断响应逻辑。 #### 模块代码实现 以下是一个基于STM32 HAL库的模块化实现示例: ```c // key_exti.h #ifndef __KEY_EXTI_H #define __KEY_EXTI_H #include "stm32f4xx_hal.h" void Key_EXTI_Init(void); void Key_EXTI_RegisterCallback(void (*callback)(void)); #endif /* __KEY_EXTI_H */ ``` ```c // key_exti.c #include "key_exti.h" static void (*user_callback)(void) = NULL; void Key_EXTI_Init(void) { GPIO_InitTypeDef GPIO_InitStruct = {0}; // 使能GPIOB时钟 __HAL_RCC_GPIOB_CLK_ENABLE(); // 配置PB0为外部中断输入 GPIO_InitStruct.Pin = GPIO_PIN_0; GPIO_InitStruct.Mode = GPIO_MODE_IT_FALLING; GPIO_InitStruct.Pull = GPIO_NOPULL; HAL_GPIO_Init(GPIOB, &GPIO_InitStruct); // 配置NVIC HAL_NVIC_SetPriority(EXTI0_IRQn, 0, 0); HAL_NVIC_EnableIRQ(EXTI0_IRQn); } void Key_EXTI_RegisterCallback(void (*callback)(void)) { user_callback = callback; } // 中断服务函数 void EXTI0_IRQHandler(void) { HAL_GPIO_EXTI_IRQHandler(GPIO_PIN_0); } // HAL库回调函数 void HAL_GPIO_EXTI_Callback(uint16_t GPIO_Pin) { if (GPIO_Pin == GPIO_PIN_0) { if (user_callback != NULL) { user_callback(); } } } ``` #### 主程序使用示例 ```c #include "main.h" #include "key_exti.h" void custom_key_handler(void) { HAL_GPIO_TogglePin(GPIOC, GPIO_PIN_13); // 翻转LED状态 } int main(void) { HAL_Init(); SystemClock_Config(); __HAL_RCC_GPIOC_CLK_ENABLE(); // 配置LED引脚 GPIO_InitTypeDef GPIO_InitStruct = {0}; GPIO_InitStruct.Pin = GPIO_PIN_13; GPIO_InitStruct.Mode = GPIO_MODE_OUTPUT_PP; GPIO_InitStruct.Pull = GPIO_NOPULL; GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_LOW; HAL_GPIO_Init(GPIOC, &GPIO_InitStruct); // 初始化按键中断模块并注册回调 Key_EXTI_Init(); Key_EXTI_RegisterCallback(custom_key_handler); while (1) { // 主循环 } } ``` #### 模块优势 - **可重用性**:该模块可在多个项目中复用,只需调用`Key_EXTI_Init()`和`Key_EXTI_RegisterCallback()`即可。 - **解耦设计**:中断处逻辑与主程序分离,便于维护和扩展。 - **灵活性**:用户可以自定义中断回调函数,满足不同应用场景的需求[^2]。 ###
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值