如何停止数据库承诺阻止Express服务器中的主线程?

编程入门 行业动态 更新时间:2024-10-09 10:23:39

如何停止数据库承诺阻止Express服务器中的<a href=https://www.elefans.com/category/jswz/34/1771233.html style=主线程?"/>

如何停止数据库承诺阻止Express服务器中的主线程?

我有一个NodeJS服务器,我尝试使用Promise来对数据库进行调用,因此我的服务器仍可以为其他客户端提供更快的查询。

这是我能做的最简单的代码:

const express = require('express');
const server = express();
const moment = require('moment');

require('dotenv').config();

const slowRoute = require('./routes/slow');
server.use('/slow', slowRoute);

server.listen(process.env.PORT, () =>
    console.log(
        `Listen on port ${process.env.PORT} | ${moment().format(
            'YYYY/MM/DD HH:mm:ss:SSS'
        )}`
    )
);

和我的路由器

const express = require('express');

const router = express.Router();
const pool = require('../database');

router.get('/', async (req, res, next) => {
    console.log(`Slow route`);
    let result = await pool.query('SELECT pg_sleep(6)');
    res.status(200).json(result.rows[0]);
});

module.exports = router;

如果我调用2次/ slow,则第二个控制台日志“慢速路由”仅在第一次完成后触发,并且结果在12秒后而不是6秒后触发。

过去我成功同时进行了2次通话,但我不明白为什么现在不能这样做。

回答如下:

await pool.query('SELECT pg_sleep(6)')其余代码停止执行,直到完成为止

请参见await MDN

你可以做

router.get('/', async (req, res, next) => {
  console.log(`Slow route`);
  pool
   .query('SELECT pg_sleep(6)')
   .then( result => {
     res.status(200).json(result.rows[0]);
  })
})

提示:我没有运行此代码

更多推荐

如何停止数据库承诺阻止Express服务器中的主线程?

本文发布于:2024-05-06 19:17:30,感谢您对本站的认可!
本文链接:https://www.elefans.com/category/jswz/34/1753712.html
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。
本文标签:主线   器中   数据库   Express

发布评论

评论列表 (有 0 条评论)
草根站长

>www.elefans.com

编程频道|电子爱好者 - 技术资讯及电子产品介绍!