node await 超时应该如何处理?

作者站长头像
站长
· 阅读数 13

在 node 中,我需要 await 等待一个异步函数执行的结果,但是我想设置一个等待时间,超过这个等待时间,我就执行另一个方法,请问我应该怎么做?

const openTecplot = async (url,uuid)=> {
    const {error,pid} = await execFile("cmd.exe",['/s','/c', url])
    if(!error){
        console.log('打开成功')
        return ({msg:'success',pid:pid,uuid:uuid,code:0})
    }
}
回复
1个回答
avatar
test
2024-07-18

结合 Promise.race([]) 来处理。

const openTecplot = async (url,uuid)=> {
  const execution = execFile("cmd.exe",['/s','/c', url]);
  const timeout = sleep(10).then(() => throw new Error('超时了')); // 假设你有个 sleep 函数,可以计时 10s
  
  try {
    const {error, pid} = await Promise.race([execution, timeout]);
    if(!error){
        console.log('打开成功')
        return ({msg:'success',pid:pid,uuid:uuid,code:0})
    }
  } catch (e) {
    // 处理超时
  }
}
回复
likes
适合作为回答的
  • 经过验证的有效解决办法
  • 自己的经验指引,对解决问题有帮助
  • 遵循 Markdown 语法排版,代码语义正确
不该作为回答的
  • 询问内容细节或回复楼层
  • 与题目无关的内容
  • “赞”“顶”“同问”“看手册”“解决了没”等毫无意义的内容