如何等待函数最多1000ms后执行下一个函数(不终止原请求)
实现带超时触发的异步函数执行逻辑
你要的需求可以通过Promise.race()来实现,它会等待传入的Promise数组中第一个完成的实例,刚好适配你的场景:
- 先定义一个简单的sleep函数,用来生成指定时长的Promise:
function sleep(ms) { return new Promise(resolve => setTimeout(resolve, ms)); }
- 用
Promise.race()同时监听func1()和1000ms的sleep,不管哪个先完成,立刻执行func2(),同时func1()会继续执行不会被中断:
// 启动func1,让它在后台执行,无需提前await const func1Promise = func1(); // 等待func1完成或1000ms超时,任一条件满足就继续 await Promise.race([func1Promise, sleep(1000)]); // 执行func2 await func2();
这个方案的逻辑完全匹配你的需求:
- 若
func1()在1000ms内返回,Promise.race()会立刻结束,马上触发func2()执行 - 若
func1()超时未完成,sleep的Promise会先resolve,同样触发func2(),而func1()会在后台继续完成自身逻辑,不会被取消
内容的提问来源于stack exchange,提问作者Pradip Shrestha
相关产品推荐
相关产品推荐

