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

2023-08-07 20:10:10 +08:00
 badboy17

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

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

971 次点击
所在节点    问与答
8 条回复
Trim21
2023-08-07 20:58:58 +08:00
js 的话感觉只能传个 AbortSignal 进去,然后修改后续代码检查是否已经超时?
ysc3839
2023-08-07 22:23:50 +08:00
不能中途中断,得在后面的代码中隔一段就检查一下是否已取消,然后返回。
badboy17
2023-08-07 22:28:43 +08:00
@ysc3839 这样相当于轮询了,隔段时间检查下
zbinlin
2023-08-07 23:18:50 +08:00
后面的代码是一个 loop 循环吗?如果不是一般就是执行完的。
Rache1
2023-08-07 23:28:16 +08:00
badboy17
2023-08-08 11:02:56 +08:00
@Rache1 race 的话,如果任务的异步函数中业务代码仍然在运行,无法结束这些业务代码,比如上面的 loop
DingJZ
2023-08-08 11:17:05 +08:00
场景再完整一点,想象不到外层是怎么用的
Rache1
2023-08-08 11:58:24 +08:00
@badboy17 #6 race 是对外层负责,对于内层的肯定是你要去在代码里面处理的,也没那个语言可以在外层直接 kill 掉某个函数的运行吧。或者就是常见的放在线程或者进程里面,外层检查超时后,关闭线程或者进程。

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

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

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

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

© 2021 V2EX