前端之使用柯里化规范接口请求

1. 介绍

  1. 当后端接口规范化的时候,我们如果一个一个的写会显得写代码的人很呆。举个例子
import { request } from 'umi'
export const goodsUpdate = (data: any) => request('/goods/update', {
  method: 'post',
  requestType: 'json',
  data
})
export const goodsList = (params: any) => request('/goods/list', {
  method: 'get',
  requestType: 'json',
  params
})
export const goodsAdd = (data: any) => request('/goods/add', {
  method: 'post',
  requestType: 'json',
  data
})
export const goodsDelete = (data: any) => request('/goods/delete', {
  method: 'post',
  requestType: 'json',
  data
})


export const orderUpdate = (data: any) => request('/order/update', {
  method: 'post',
  requestType: 'json',
  data
})
export const orderList = (params: any) => request('/order/list', {
  method: 'get',
  requestType: 'json',
  params
})
export const orderAdd = (data: any) => request('/order/add', {
  method: 'post',
  requestType: 'json',
  data
})
export const orderDelete = (data: any) => request('/order/delete', {
  method: 'post',
  requestType: 'json',
  data
})

如果只是这样是不是感觉还能接受?那如果上面操作重复了10次呢?50次呢?或者上百次呢?此时此刻我是无法接受的,复制粘贴也是很累人的。

  1. 本文主要目的就是以柯里化的形式简化抽成上面的代码
  2. 柯里化简单介绍一下:无论传入什么,满足以下条件的则是了。
/*
 * 实现 fn(a)(b)(c) = f(a, b)(c) = f(a)(b, c) =  f(a, b, c)
 */
  1. 本文柯里化函数引至 lodash

实现

  1. src/utils/request.ts
import { request } from 'umi'
import _ from 'lodash';
const obj: any = {
  post: 'data',
  get: 'params'
}
const requestNormal = _.curry((type: string, method: string, url: string, data: any) => {
  const config: any = {
    method: method.toLocaleLowerCase(),
    requestType: 'json',
  }
  obj[config.method] ? config[obj[config.method]] = data : void 0;
  return request(`${url}/${type}`, config)
})

export const reqFn = requestNormal

export const add = requestNormal('insert', 'post')
export const edit = requestNormal('update', 'post')
export const list = requestNormal('query', 'post')
export const del = requestNormal('delete', 'post')

  1. src/api/service.ts
import { list, add, edit, del, reqFn } from '@/utils/request'

const goodsUrl = '/goods'
export const goodsAdd = add(goodsUrl)
export const goodsEdit = edit(goodsUrl)
export const goodsList = list(goodsUrl)
export const goodsDel = del(goodsUrl)

const orderUrl = '/order'
export const goodsAdd = add(orderUrl)
export const goodsEdit = edit(orderUrl)
export const goodsList = list(orderUrl)
export const goodsDel = del(orderUrl)

// .....
  1. 使用
import { goodsList } from '@/api/service.js'
const params = {
	goodsName: 'goods'
}
goodsList(params).then(({ data }) => {
	console.log(data)
})

注意: 使用的时候必须传递参数! 否则会返回一个待接受参数的函数而不是Promise函数。

总结

  1. 之所以商品和订单在同一个api文件中是为了举例子。不纠结
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
柯里化是一种函数式编程的概念,它指的是将一个接受多个参数的函数转化为一系列只接受单个参数的函数的过程。在Python中,可以通过使用闭包或者装饰器来实现柯里化。 闭包是指在一个内部函数中引用了外部函数的变量,并且该内部函数可以在外部函数调用结束后继续访问这些变量。通过使用闭包,我们可以实现柯里化。下面是一个使用闭包实现柯里化的示例: ```python def add(x): def inner(y): return x + y return inner add_5 = add(5) print(add_5(3)) # 输出 8 ``` 在上面的例子中,`add` 函数接受一个参数 `x`,并返回一个内部函数 `inner`。内部函数 `inner` 接受参数 `y`,并返回 `x + y` 的结果。通过调用 `add(5)`,我们得到了一个新的函数 `add_5`,它只需要一个参数 `y`,并且会将 `x` 固定为 5。这样,我们就实现了柯里化。 除了使用闭包,还可以使用装饰器来实现柯里化。下面是一个使用装饰器实现柯里化的示例: ```python def curry(func): def inner(*args): if len(args) >= func.__code__.co_argcount: return func(*args) return inner return inner @curry def add(x, y): return x + y add_5 = add(5) print(add_5(3)) # 输出 8 ``` 在上面的例子中,我们定义了一个装饰器 `curry`,它接受一个函数 `func` 作为参数,并返回一个新的函数 `inner`。新的函数 `inner` 接受任意数量的参数 `args`,如果参数个数足够,则调用原始函数 `func` 并返回结果;否则,返回自身。通过在 `add` 函数上应用装饰器 `@curry`,我们实现了柯里化

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值