Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/node.js/40.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Node.js 如果客户端在NodeJs中取消中间的请求,则停止进一步的执行过程_Node.js_Express - Fatal编程技术网

Node.js 如果客户端在NodeJs中取消中间的请求,则停止进一步的执行过程

Node.js 如果客户端在NodeJs中取消中间的请求,则停止进一步的执行过程,node.js,express,Node.js,Express,我正在我的NodeJs服务器上使用Puppeter、cheerio和pdfkit创建网站的pdf,这需要很多时间,现在我想在客户端取消请求时中止所有进程,即关闭浏览器、选项卡等,以便服务器不处理不必要的进程。 例如: app.get("/api/processScreenshot/:url", async (req, resp) => { const links = await collectAllLinks(url); const screenshotsPat

我正在我的NodeJs服务器上使用Puppeter、cheerio和pdfkit创建网站的pdf,这需要很多时间,现在我想在客户端取消请求时中止所有进程,即关闭浏览器、选项卡等,以便服务器不处理不必要的进程。 例如:

app.get("/api/processScreenshot/:url", async (req, resp) => {
  const links = await collectAllLinks(url);
  const screenshotsPath = await takeScreenshots(links);
  const pdfPath = await createPDF(screenshotsPath);
  resp.status(200).end(pdfPath);
});

如果请求以任何方式被取消,即它接收到取消关闭中止事件,是否可以中止此rest API中的所有后续进程?

没有取消任何异步函数的通用方法,因此,如果您只看到一个
wait
函数,您需要深入了解该函数,看看它们是否有取消该过程的功能

例如,为什么
createPdf
是异步的?也许这需要一个外部过程?你可以扼杀这个过程。也许它会调用第三方API?取消HTTP请求


可以取消的基于承诺的API的一个很好的例子是fetch,它使用
AbortController
。这也是一个很好的模式,可以应用于您自己的函数,但是您需要为任何要添加取消支持的函数显式(主要是手动)编写代码。

如果这些是一些同步调用,比如说一些繁重的计算,我知道大多数基于promise的API都提供中止或终止事件,但如果有人故意进行调用,然后在调用之间取消请求,并且请求正在执行一些计算工作,这会使我的服务器对实际用户/用例繁忙。@SandePathi您不能真正中断同步功能。要让其他东西干扰它,它必须是异步的。只要同步函数在Javascript中运行,其他Javascript代码就不会执行,除非它在单独的进程或webworker中运行。