工作 8 年,这样 while 循环调别人接口是什么水平?

9 小时 55 分钟前
 Mannnnning

同事写的代码,循环调了别人接口 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;
}

1911 次点击
所在节点    程序员
21 条回复
Chemist
9 小时 32 分钟前
怕什么,callRpc 会阻塞,又不会并发出去。你这边不 while 循环保证拿到 id ,那一定会在别的地方循环调你这个 getId() 方法 50 次。抛到最上层,那就是用户手动点按钮一直点。然后前端弹了 50 个 message 之后请求成功。业务复杂度不会降低,只会转移。
frank1256
9 小时 16 分钟前
你不能立马怪他,也许对方就不提供批量接口,能咋办。我遇到过对接方的,就不给批量,高端点就并发调呗
MoozLee
9 小时 10 分钟前
比较好奇在三方不提供批量接口,且不允许并发的情况下。除了循环还有什么办法?项目上正好有一个需要调 1000 次三方接口的需求,三方不允许并发。
KongLiu
9 小时 3 分钟前
第三方接口的无奈之举,很正常
lnbiuc
8 小时 52 分钟前
现在都是抛开业务逻辑和实际使用场景不谈吗
FrankAdler
8 小时 34 分钟前
蠢或者懒,我前几天刚好处理了一个循环调用,他代码注释写的批量,紧接着就 for 循环调用,可惜人已经被裁,问不到真相了。
winnerczwx
8 小时 20 分钟前
刚入行才会考虑优不优雅, 入行久了只会考虑 这个方案在这个场景下能不能解决问题, 有没有其他风险, 有风险会在什么情况下爆发 我是否可控, 如果一切都 OK 那就干
Ashe007
8 小时 3 分钟前
楼上是认真的吗?我怎么觉得 break 的时机很奇怪呢,除非这个做法跟业务强绑定,否则我认为这是一段差劲的代码
Mannnnning
7 小时 57 分钟前
@Ashe007 是真实事件,单号续约场景、从当前单号逐步查询到第一个单号。
Mannnnning
7 小时 55 分钟前
@lnbiuc 行业信息被我脱敏了。续约场景,从当前最爱你查询到第一个原始单号。
defphilip
7 小时 49 分钟前
这不是一坨垃圾吗,评论区在洗啥,一个最简单的问题,如果查失败了怎么办?外部知道发生了什么?

所以 AI 很好,替代这些废物用的
Ashe007
7 小时 48 分钟前
@Mannnnning 如果 id 为第一个单号,call 返回零或负值,那完全没问题。赞同一楼(更准确的表达应该是:复杂度不会消失,只会转移)
ghostman
7 小时 46 分钟前
你的意思是代码不够简洁,还是不该循环调用?
Reficul
7 小时 42 分钟前
身经百战见得多了,总想搞个大新闻。

又不是不能用.jpg
Ashe007
7 小时 41 分钟前
@defphilip 外部 try catch 之类的处理一下就好了吧,伪代码可能并没有把这部分贴出来
allenzhangSB
7 小时 35 分钟前
这里不是 callRpc 接口设计的问题吗? 提供一个可以直接查询到第一个单号的接口不就行了?
Mannnnning
7 小时 32 分钟前
@Ashe007 这种逻辑复杂度在设计层面,就应该用空间替换啊。碰到高并发场景、整个机器都会被死循环拖垮。
KongLiu
7 小时 14 分钟前
@defphilip ?这不是伪代码吗,只是讨论循环的情况,外部没有提供批量查询的接口,你用 AI 黑进第三方服务器给你改接口是吧
pulutom40
7 小时 7 分钟前
天天喊着要被 ai 替代了,大概率就是这种人
lesismal
6 小时 30 分钟前
看不懂 OP 要表达什么。
是我太菜了吗?

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/1223716

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX