• 请不要在回答技术问题时复制粘贴 AI 生成的内容
Mannnnning
V2EX  ›  程序员

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

  •  
  •   Mannnnning · Jun 29 · 4246 views
    This topic created in 135 days ago, the information mentioned may be changed or developed.

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

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

    又不是不能用.jpg
    Ashe007
    Ashe007
    Jun 29
    15
    @defphilip 外部 try catch 之类的处理一下就好了吧,伪代码可能并没有把这部分贴出来
    allenzhangSB
    16
    这里不是 callRpc 接口设计的问题吗? 提供一个可以直接查询到第一个单号的接口不就行了?
    Mannnnning
    Mannnnning
    OP
    Jun 29❤️1
    17
    @Ashe007 这种逻辑复杂度在设计层面,就应该用空间替换啊。碰到高并发场景、整个机器都会被死循环拖垮。
    KongLiu
    KongLiu
    Jun 29
    18
    @defphilip ?这不是伪代码吗,只是讨论循环的情况,外部没有提供批量查询的接口,你用 AI 黑进第三方服务器给你改接口是吧
    pulutom40
    pulutom40
    Jun 29 via iPhone
    19
    天天喊着要被 ai 替代了,大概率就是这种人
    lesismal
    lesismal
    Jun 29
    20
    看不懂 OP 要表达什么。
    是我太菜了吗?
    Levox
    Levox
    Jun 29
    21
    所以楼主有什么高见可以看看吗
    sir283
    sir283
    Jun 30
    22
    抛开业务背景直接谈代码,没有意义,就像有人会问:会 printf("hello");是什么水平一样。
    wanei
    wanei
    Jun 30
    23
    大部分代码都是处理边界条件和异常的。功能实现就行。此外 id 返回的值不符合预期,return 应该在 break 那。
    wanei
    wanei
    Jun 30
    24
    @wanei #23 缩进看错了...
    lingxipaofan
    25
    这个缩进看的好难受
    Mannnnning
    Mannnnning
    OP
    Jun 30
    26
    @lesismal 想要吐槽一下同事写的代码,昨天我刚把这个循环去掉了~
    zuixinwenyue
    27
    你真闲的!没事给自己找优越感,在代码上贬低一下同事
    GoogleQi
    GoogleQi
    Jun 30
    28
    @defphilip Ai 更容易写垃圾代码
    lesismal
    29
    @Mannnnning 但是你描述的上下文不全,也不知道上下游具体的代码实现,并不能说明去掉循环更好,这也是我说看不懂的原因。。。
    About   ·   Help   ·   Advertise   ·   Blog   ·   API   ·   FAQ   ·   Privacy   ·   Solana   ·   4562 Online   Highest 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 76ms · UTC 06:06 · PVG 14:06 · LAX 22:06 · JFK 01:06
    ♥ Do have faith in what you're doing.