Javascript 如何取消以前的快速请求,以便执行新请求?
我有这个终点。此api需要很长时间才能获得响应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终止另一个进程,您所需要的只是会话/用户/进程
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终止这个进程。。