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