停止从快速路线执行功能

时间:2018-04-24 18:46:37

标签: javascript node.js

我试图在快速路线中丢失连接时停止执行某项功能,我有类似的事情。

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,该事件就不会触发。关于如何解决这个问题的任何想法?

1 个答案:

答案 0 :(得分:0)

宣传结束活动:

 const ended = new Promise((_, rej) => req.on('close', rej));

然后将其传递给您的所有函数,并且每当您执行异步操作时,请替换:

 await sth();

使用:

 await Promise.race(ended, sth());

现在try {} catch最外线的电话,你完成了:)