我试图在快速路线中丢失连接时停止执行某项功能,我有类似的事情。
app.post('routeName',function (req,res,next)=>{
req.on('close',()=>{
//do something to stop function
});
module.myFunction(req, (err,result)=>{
//do something with the result
})
})
myFunction是一些可能需要一段时间的mongo查询(主要用于服务器端过滤大型数据集)但有时如果设置了新的过滤器则再次调用该函数,在这种情况下我想停止myFunction的工作是在做。我可以调用res.end(),或者在onClose监听器中返回res.end()或类似的东西,但是myFunction中正在进行的任何工作仍然继续进行。我尝试添加req.on(' close')函数,但是一旦req对象传递给myFunction,该事件就不会触发。关于如何解决这个问题的任何想法?
答案 0 :(得分:0)
宣传结束活动:
const ended = new Promise((_, rej) => req.on('close', rej));
然后将其传递给您的所有函数,并且每当您执行异步操作时,请替换:
await sth();
使用:
await Promise.race(ended, sth());
现在try {} catch
最外线的电话,你完成了:)