IF语句判断JSON响应count_business失效,双分支同时执行问题求助
看起来你遇到了个挺头疼的小坑——明明写了互斥的if-else逻辑,结果两个分支的代码居然都跑起来了。结合你给出的代码和JSON示例,我来帮你梳理下可能的原因和解决办法:
先排查最可能的几个问题
1. 确认count_business的类型和取值是否符合预期
有时候后端返回的字段看起来是数字,但实际是字符串类型,或者字段路径写错了导致拿到undefined,这都会让你的判断逻辑失效。你可以在if语句前加几行日志,把关键信息打出来:
// 先打印关键信息,排查问题根源 console.log('count_business 取值:', res.data.count_business); console.log('count_business 类型:', typeof res.data.count_business); console.log('完整响应数据:', res.data);
比如如果res.data.count_business是字符串"3",那"3" < 1在JS里会被隐式转换成字符串比较,结果是false,应该走else分支;但如果字段路径写错(比如写成了res.count_business而不是res.data.count_business),拿到的是undefined,那undefined < 1的结果是false,同样走else分支。不过你说两个分支都执行了,这大概率不是这个原因,但还是得先确认。
2. 检查是否有其他地方调用了fetchGooglePlace
这是最常见的坑——你以为只有这个if分支会调用fetchGooglePlace,但可能在代码的其他地方(比如另一个函数、某个异步回调里)也触发了这个函数。建议全局搜索你的代码库,看看fetchGooglePlace的调用位置,是不是有多余的调用没注意到。
3. 确认包含这个if语句的代码是否被多次执行
比如如果这段代码是在一个循环里、或者某个会重复触发的事件回调(比如多次请求回调)里,可能某次请求的count_business小于1(触发if分支),另一次请求的count_business大于等于1(触发else分支),看起来就像两个分支都执行了。你可以在if语句前加一个唯一标识的日志,比如:
console.log('当前执行的请求标识:', 某个唯一ID); // 比如请求的参数ID之类的
这样就能看出是不是多次执行导致的两个分支都跑了。
针对性修复建议
如果排查出是类型问题(比如count_business是字符串),可以先把它转成数字再判断:
const businessCount = Number(res.data.count_business); if (businessCount < 1) { fetchGooglePlace(data); } else { console.log(chalk.white('RUNNING WHITEPAGES')); // 原else分支的循环代码 }
如果是其他地方多余调用了fetchGooglePlace,把那些多余的调用删掉就行;如果是代码被多次执行,那就要看是不是逻辑上需要限制执行次数,或者处理重复触发的问题。
另外,你给出的JSON示例里business数组里的对象没有phones字段,这段循环代码可能会报错,顺手提醒你一下~
内容的提问来源于stack exchange,提问作者Chris

