同事写的代码,循环调了别人接口 50+次
var callRpc(var id) {
此处省略(P99 = 2S)
}
var getId() {
var id = 0;
while(true) {
tmp = callRpc(id);
if (tmp <=0) {
break;
}
id = tmp;
}
return id;
}
var callRpc(var id) {
此处省略(P99 = 2S)
}
var getId() {
var id = 0;
while(true) {
tmp = callRpc(id);
if (tmp <=0) {
break;
}
id = tmp;
}
return id;
}
1
Chemist Jun 29
怕什么,callRpc 会阻塞,又不会并发出去。你这边不 while 循环保证拿到 id ,那一定会在别的地方循环调你这个 getId() 方法 50 次。抛到最上层,那就是用户手动点按钮一直点。然后前端弹了 50 个 message 之后请求成功。业务复杂度不会降低,只会转移。
|
2
frank1256 Jun 29
你不能立马怪他,也许对方就不提供批量接口,能咋办。我遇到过对接方的,就不给批量,高端点就并发调呗
|
3
MoozLee Jun 29 比较好奇在三方不提供批量接口,且不允许并发的情况下。除了循环还有什么办法?项目上正好有一个需要调 1000 次三方接口的需求,三方不允许并发。
|
4
KongLiu Jun 29
第三方接口的无奈之举,很正常
|
5
lnbiuc Jun 29 现在都是抛开业务逻辑和实际使用场景不谈吗
|
6
FrankAdler Jun 29
蠢或者懒,我前几天刚好处理了一个循环调用,他代码注释写的批量,紧接着就 for 循环调用,可惜人已经被裁,问不到真相了。
|
7
winnerczwx Jun 29 刚入行才会考虑优不优雅, 入行久了只会考虑 这个方案在这个场景下能不能解决问题, 有没有其他风险, 有风险会在什么情况下爆发 我是否可控, 如果一切都 OK 那就干
|
8
Ashe007 Jun 29
楼上是认真的吗?我怎么觉得 break 的时机很奇怪呢,除非这个做法跟业务强绑定,否则我认为这是一段差劲的代码
|
9
Mannnnning OP @Ashe007 是真实事件,单号续约场景、从当前单号逐步查询到第一个单号。
|
10
Mannnnning OP @lnbiuc 行业信息被我脱敏了。续约场景,从当前最爱你查询到第一个原始单号。
|
11
defphilip Jun 29
这不是一坨垃圾吗,评论区在洗啥,一个最简单的问题,如果查失败了怎么办?外部知道发生了什么?
所以 AI 很好,替代这些废物用的 |
12
Ashe007 Jun 29
@Mannnnning 如果 id 为第一个单号,call 返回零或负值,那完全没问题。赞同一楼(更准确的表达应该是:复杂度不会消失,只会转移)
|
13
ghostman Jun 29
你的意思是代码不够简洁,还是不该循环调用?
|
14
Reficul Jun 29
身经百战见得多了,总想搞个大新闻。
又不是不能用.jpg |
16
allenzhangSB Jun 29
这里不是 callRpc 接口设计的问题吗? 提供一个可以直接查询到第一个单号的接口不就行了?
|
17
Mannnnning OP @Ashe007 这种逻辑复杂度在设计层面,就应该用空间替换啊。碰到高并发场景、整个机器都会被死循环拖垮。
|
19
pulutom40 Jun 29 via iPhone
天天喊着要被 ai 替代了,大概率就是这种人
|
20
lesismal Jun 29
看不懂 OP 要表达什么。
是我太菜了吗? |
21
Levox Jun 29
所以楼主有什么高见可以看看吗
|
22
sir283 20h 18m ago
抛开业务背景直接谈代码,没有意义,就像有人会问:会 printf("hello");是什么水平一样。
|
23
wanei 17h 43m ago
大部分代码都是处理边界条件和异常的。功能实现就行。此外 id 返回的值不符合预期,return 应该在 break 那。
|
25
lingxipaofan 16h 54m ago
这个缩进看的好难受
|
26
Mannnnning OP @lesismal 想要吐槽一下同事写的代码,昨天我刚把这个循环去掉了~
|
27
zuixinwenyue 13h 17m ago
你真闲的!没事给自己找优越感,在代码上贬低一下同事
|