V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
V2EX 提问指南
badboy17
V2EX  ›  问与答

node 中异步函数,如何超时返回

  •  
  •   badboy17 · 2023-08-07 20:10:10 +08:00 · 946 次点击
    这是一个创建于 443 天前的主题,其中的信息可能已经有所发展或是发生改变。

    在某个异步函数内 function f(){ return new Promise(async (resolve, reject) => { event.on('timeout',()=>{ resoleve() }) //do something })) }

    这个异步函数内,如果触发 event 的 emit ,即使这个 promise 是 resolved ,但是后面的代码仍然在继续运行,我想要做到,如果达到超时时间,就结束这个函数中所有的代码,并且返回 可以做到吗

    8 条回复    2023-08-08 11:58:24 +08:00
    Trim21
        1
    Trim21  
       2023-08-07 20:58:58 +08:00 via Android
    js 的话感觉只能传个 AbortSignal 进去,然后修改后续代码检查是否已经超时?
    ysc3839
        2
    ysc3839  
       2023-08-07 22:23:50 +08:00 via Android
    不能中途中断,得在后面的代码中隔一段就检查一下是否已取消,然后返回。
    badboy17
        3
    badboy17  
    OP
       2023-08-07 22:28:43 +08:00
    @ysc3839 这样相当于轮询了,隔段时间检查下
    zbinlin
        4
    zbinlin  
       2023-08-07 23:18:50 +08:00
    后面的代码是一个 loop 循环吗?如果不是一般就是执行完的。
    Rache1
        5
    Rache1  
       2023-08-07 23:28:16 +08:00
    badboy17
        6
    badboy17  
    OP
       2023-08-08 11:02:56 +08:00
    @Rache1 race 的话,如果任务的异步函数中业务代码仍然在运行,无法结束这些业务代码,比如上面的 loop
    DingJZ
        7
    DingJZ  
       2023-08-08 11:17:05 +08:00
    场景再完整一点,想象不到外层是怎么用的
    Rache1
        8
    Rache1  
       2023-08-08 11:58:24 +08:00   ❤️ 1
    @badboy17 #6 race 是对外层负责,对于内层的肯定是你要去在代码里面处理的,也没那个语言可以在外层直接 kill 掉某个函数的运行吧。或者就是常见的放在线程或者进程里面,外层检查超时后,关闭线程或者进程。
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   1944 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 27ms · UTC 16:16 · PVG 00:16 · LAX 09:16 · JFK 12:16
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.