const [predictNum, setPredictNum] = useState('-');
....
let lastParams: Partial<RuleNode>;
function getLabelForecast(params: Partial<RuleNode>) {
lastParams = params;
return api.getLabelForecast(params).then((response) => {
return {response, params};
});
}
getLabelForecast(ruleNode)
.then((res) => {
// console.log('value>>>', lastParams.value, res.params.value);
// console.log('secondValue>>>', lastParams.value, res.params.value);
if (res.params.value === lastParams.value &&
res.params.secondValue === lastParams.secondValue) {
setPredictNum(res.response === 0 ||
res.response ? res.response : '-');
}
})
.catch((e) => {
console.error(e);
message.error(e?.msg || '实时预估异常');
setPredictNum('-');
});
// 此处的 BUG => 需要展示 请求回来的预估人数如果是 ‘0’,则显示0。默认展示的是 ‘-’,
//分析:当前达到的需求是默认状态的 ‘-’。返回数据状态为 null,undefined,都可以展示 ‘-’,
// 关键是 请求数据为 “0”时,不显示为0,而是默认的 ‘-’
// 解决:1 通过发送请求,.then拿到res数据,再用if判断将请求回来的数据和 “最后一次”数据对比
//然后再去 setPredictNum();
// if (res.params.value === lastParams.value &&
// res.params.secondValue === lastParams.secondValue && res.response){
// setPredictNum(res.response === 0 || res.response ? res.response : '-')}
// 注意:因为是人数(数值类型)所以只考虑了 “正常状态” 的情况,
// 认为哪怕是最小也是 0,后端不应该返回 空值、未定义 什么的,而不会存在 null,undefined
// 但是这样想错了 “异常状态(服务器宕机了、网络出现异常 => 显示什么 ?)”
// 假设此时后端是不会有任何返回,需要前端做好 突发 “预测”
// 所以不能将异常的情况忽略
// 2 利用手动 设置 res.response = 0/null/undefined,然后
// console.log(res.response)
// console.log('value>>>', lastParams.value, res.params.value);
// console.log('secondValue>>>', lastParams.value, res.params.value);
// 发现还是不能显示请求回来的数据为 0 ,展示为 ‘-’
// 3 最初的改法(这样虽然请求回来为0是可以正常展示 ‘-’,但是 “异常状态” 被忽略了!!!)
// if (res.params.value === lastParams.value &&
// res.params.secondValue === lastParams.secondValue &&
// res.response !== '-') {setPredictNum(res.response ? res.response : 0)}
// 4 思考:原来的 setPredictNum(res.response === 0 || res.response ? res.response : '-');
// 是正确的 它已然实现了对三种情况的考虑和处理,只是目前的if “判断条件” 限制了 请求数据返回为0时的情况
// 那么怎么修改???在此处为难了。===> 柳岸花明又一村
// 回顾之前的思路,当我设置 res.response = 0/null/undefined时,为什么0就是显示不正常?
// 判断条件是否将为0的情况直接拦截了,造成了请求虽然回来了但是没有进入 setPredictNum(),所以默认‘-’
// 然后就发现了最后一个 && res.response 条件的判断考虑到了为0的情况
// (res.params.value === lastParams.value &&
// res.params.secondValue === lastParams.secondValue)
// 修改后直接将最后的判读条件去除掉,这样请求回来数据时0,setPredictNum()中
// 就可以用 || 条件再去检查0、 null、undefined、以及默认为 ‘-’ 的情况了
// 收获:1 考虑细节和场景、情况必须要 “全面!!!”
// 2 在原有的代码基础上修改需求或者BUG同样要考虑 “全面”
// 3 必须将对应改动模块的 “代码” 一行一行的看个明白,按层次缕清思路,步骤,分析理解别人的考量
// 4 有时候的改动需要 “蓦然回首,那 “答案”却在灯火阑珊处” 的思维。