使用 Node.js,当遇到路由结束时 Express 是否会停止所有尚未完成的异步代码?

我的新账户

环境: Node.js、Express

问题:当路由结束时,所有尚未完成的异步代码都会停止吗?我已经试验了几个小时,这似乎是真的,但有明确的答案吗?

示例:在下面的简化示例中,当/路由getInfoAndSaveIt被调用时。这个函数有一个 fetch 调用,它会很慢,然后是一个也很慢的数据库保存。在路线中,程序肯定会res.render('homepage');在功能完成之前到达路线在这种情况下,homepage渲染和尚未完成的函数中的所有异步代码是否停止?或者,即使到达了路由的末端,异步代码也会在后台继续吗?

app.get('/', function(req, res) {
    
    getInfoAndSaveIt();
        
    res.render('homepage');
});

function getInfoAndSaveIt() {

    let randomData = fetch('https://www.example.com/data.txt');

    User.updateOne({ data: randomData }, { id: 'abc123' });
}
jfriend00

使用 Node.js,当遇到路由结束时 Express 是否会停止所有尚未完成的异步代码?

不。异步代码有自己的想法,与特定路由没有直接联系。例如,假设您正在使用一些异步代码来进行一些日志记录。您发送响应,然后调用一些异步代码来记录一些数据。该日志记录将继续正常进行。它与路线没有直接联系。它只是在解释器中运行的 Javascript。

至于你的例子:

在这种情况下,主页呈现和尚未完成的函数中的所有异步代码是否停止?

是的,主页将呈现。您的异步代码将自行完成。

或者,即使到达了路由的末端,异步代码也会在后台继续吗?

是的,异步代码会自行继续。

试试这个简单的例子:

app.get('/', function(req, res) {
    setTimeout(() => {
        console.log("timer fired");
    }, 2000);
    res.render('homepage');
    console.log("done rendering page");
});

当您点击此路线时,您将在服务器日志中看到:

done rendering page
timer fired

作为异步操作在路由完成后继续的证据。

请记住,在 node.js 中处理路由只是另一个异步操作。这不是一些神奇的过程或线程。它只是由传入的 http 请求触发的异步操作。因此,没有任何魔法属性可以找到由此启动的所有异步操作并以某种方式杀死它们。这不是 node.js 的工作方式。恰恰相反。一旦您启动它们,它们就会有自己的想法,并且无论该过程中正在做什么,它们都会完成,除非该过程崩溃或您专门调用process.exit().

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

在Node.js / Express中使用异步Postgres的正确方法?

Node JS/Express 路由

如何使用Node JS中的嵌套/相关API调用从FOR循环结束时捕获结果

Node.js Express中的异步代码

如何使用Node.js Express模块化路由

使用Express和Passport JS重定向Node中的路由

Node.js-使用Express时未定义端口时停止应用程序

使用Express和Node.js进行路由时出现404错误

如何使用Node JS Express响应xml?

使用Node.js Express的Rest API

使用Node.js Express的SEO

使用Node.js + Express的全局对象

使用Express模块安装Node.js

使用Node Express JS下载文件

使用Node JS Express的IMS LTI实现

Node.js:有限的并行执行挂在处理即将结束时

在带有express的node.js中使用express.static(__ dirname)函数时,重定向到错误的html页面

如果我仅用Node.js就能完成所有工作,为什么还要使用Express?

JEST with Express尚未完成

为什么我在使用 Node.js/Express-TypeScript 访问 SSL 证书时遇到问题?

Node.js / Express异步功能

使用 Express JS 的路由

为什么声明返回值时我的函数没有结束(Node.js和Express.js)

是否可以使用 express.js 清除 node.js 需要缓存?

使用没有express.js的核心node.js进行会话管理

在Stylus和Node.js和Express中使用本地图像是否可行?

是否可以使用Node.js和Express通过request.query传递对象数组?

使用 Facebook 登录、Passport、Express、React 和 Node 时没有设置用户 cookie

如何使用Express和Node进行异步调用