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

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

  •  
  •   badboy17 · 264 天前 · 791 次点击
    这是一个创建于 264 天前的主题,其中的信息可能已经有所发展或是发生改变。

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