处理前后端枚举变量不同的需求场景(Map的应用)

处理前后端枚举变量不同的需求场景(Map的应用)

需求描述

现在后端有个任务以及任务状态的概念,前端需要做展示,后端的状态有八种,但是前端需要整合为五种,也就意味着后端返回的某些状态前端需要整合为一个状态,这时我们前后端的枚举变量就不能一样了,前端需要做特殊处理

方法

目前想到的比较易于逻辑和代码易读性的就是用Map这种数据类型生成服务端的status到前端的status的映射,然后每次判断用map.get方法去获取后端status在前端所对应的status关系

后端枚举变量
export enum ServerOperationTaskStatus {
  INITIATED = "01",
  PENDING = "02",
  CANCELED = "03",
  SENT = "04",
  RECEIVED = "05",
  SUCCEEDED = "06",
  FAILED = "07",
  TIMEOUT = "08",
}
前端枚举变量
export enum OperationTaskStatus {
  RUNNING,
  SUCCESSED,
  QUEUEING,
  FAILED,
  CANCELED,
}

Map映射

export const OperationTaskStatusMap = new Map<ServerOperationTaskStatus, OperationTaskStatus>([
  [ServerOperationTaskStatus.INITIATED, OperationTaskStatus.CANCELED],
  [ServerOperationTaskStatus.PENDING, OperationTaskStatus.CANCELED],
  [ServerOperationTaskStatus.CANCELED, OperationTaskStatus.CANCELED],
  [ServerOperationTaskStatus.SENT, OperationTaskStatus.CANCELED],
  [ServerOperationTaskStatus.RECEIVED, OperationTaskStatus.CANCELED],
  [ServerOperationTaskStatus.SUCCEEDED, OperationTaskStatus.CANCELED],
  [ServerOperationTaskStatus.FAILED, OperationTaskStatus.CANCELED],
  [ServerOperationTaskStatus.TIMEOUT, OperationTaskStatus.CANCELED],
]);
前端枚举反查服务端
// 前端的status到服务端destatus list的映射
export const OperationStatusToServerStatsMap = new Map<OperationTaskStatus, ServerOperationTaskStatus[]>([
  [OperationTaskStatus.RUNNING, [ServerOperationTaskStatus.SENT, ServerOperationTaskStatus.RECEIVED]],
  [OperationTaskStatus.SUCCESSED, [ServerOperationTaskStatus.SUCCEEDED]],
  [OperationTaskStatus.QUEUEING, [ServerOperationTaskStatus.INITIATED, ServerOperationTaskStatus.PENDING]],
  [OperationTaskStatus.FAILED, [ServerOperationTaskStatus.FAILED, ServerOperationTaskStatus.TIMEOUT]],
  [OperationTaskStatus.CANCELED, [ServerOperationTaskStatus.CANCELED]],
]);
结果

然后在服务端返回来的数据后我们可以注意进行处理然后生成前端枚举映射对应的值的Map供前端逻辑的开发

deviceController
  .getTaskExecCount(task.taskNo)
  .then((res) => {
    const statusCountMap = new Map<OperationTaskStatus, number>([]);
    res?.forEach(({ status, count }) => {
      statusCountMap.set(OperationTaskStatusMap.get(status), count);
    });
    console.log(statusCountMap);
  })
  .catch(() => {
    // setLoading(false);
  });
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值