Javascript 如何取消以前的快速请求,以便执行新请求?

Javascript 如何取消以前的快速请求,以便执行新请求?,javascript,html,node.js,reactjs,express,Javascript,Html,Node.js,Reactjs,Express,我有这个终点。此api需要很长时间才能获得响应 app.get('/api/execute_script',(req,res) =>{ //code here } 我有以下终结点,它将终止进程 app.get('/api/kill-process',(req,res) => { //code here } 但除非第一个api得到响应,否则第二个api不会执行。如何取消上一个api请求并执行第二个请求?您可以使用EventEmitter终止另一个进程,您所需要的只是会话/用户/进程

我有这个终点。此api需要很长时间才能获得响应

app.get('/api/execute_script',(req,res) =>{
//code here
}
我有以下终结点,它将终止进程

app.get('/api/kill-process',(req,res) => {
//code here
}

但除非第一个api得到响应,否则第二个api不会执行。如何取消上一个api请求并执行第二个请求?

您可以使用
EventEmitter
终止另一个进程,您所需要的只是会话/用户/进程标识符

const EventEmitter = require('events');
const emitter = new EventEmitter();

app.get('/api/execute_script', async(req,res,next) => {

  const eventName = `kill-${req.user.id}`; // User/session identifier
  const proc = someProcess(); 
  const listener = () => {
     // or whatever you have to kill/destroy/abort the process
    proc.abort()
  }

  try {
    emitter.once(eventName, listener);

    await proc

    // only respond if the process was not aborted
    res.send('process done')
  } catch(e) {
    // Process should reject if aborted
    if(e.code !== 'aborted') {
      // Or whatever status code
      return res.status(504).send('Timeout');
    }
    // process error
    next(e);
  } finally {
    // cleanup
    emitter.removeListener(eventName, listener)
  }
})

app.get('/api/kill-process',(req,res) => {
  //code here
  const eventName = `kill-${req.user.id}`;
  // .emit returns true if the emitter has listener attached
  const killed = emitter.emit(eventName);

  res.send({ killed })
})

你能解释一下你在做什么吗?因为完成
/api/execute\u script
所需的时间无关紧要,所以您始终可以调用另一个端点,而不会被第一个端点阻止。@MarcosCasagrande我正在执行一个脚本。。基本上,我只想用一个api终止这个进程。。