- "retCode"表示任务状态,0代表任务进行中,1代表任务中止;
- "msg"是任务中止时的异常信息;
- "total"是总任务数,比如分页操作的总页数;
- "loaded"是任务当前的完成度,比如分页操作中已完成的页数。
当进度在存储中不存在时,轮询接口会返回给前端一个loaded>=total的结果,代表任务完成。
任务进度的key生成规则
进度key 的生成较为复杂。首先,它由两部分构成:
- 不同的任务类型,它的key有不同的前缀。
- 同一任务类型,参数不同(名称、个数、类型),代表的操作不同,所以使用任务的参数列表作为后缀。
前缀的管理较为简单,可以统一到一个枚举或常量类中;后缀的生成较为复杂,需要注意的问题如下:
- 后端在步骤①、④接收参数时,参数顺序未保证完全一致,导致生成的key不一致。
- 步骤①中,前端传来的参数,后端接收不全;而前端不知道这一情况,会在步骤④中传入所有参数,导致生成的key不一致。
- 前端会带一些时间相关的参数(比如_t时间戳),步骤①、④的参数值会不一样,导致生成的key不一致。
- 某些任务依赖cookie中的字段,某些不依赖。
解决方案为:
- 对作为进度key后缀的参数,进行字典序排序。
- 在任务类型(即key 的前缀)枚举类中,维护一个“请求参数list”,其中存放所有作为key后缀的参数名。在步骤①、④中,根据“请求参数list”提取参数。
- 解决方案同2。
- 同解决方案2,维护一个“上下文参数”。