Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ios/116.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 如何在Express server中阻止数据库承诺阻止主线程?_Node.js_Express - Fatal编程技术网

Node.js 如何在Express server中阻止数据库承诺阻止主线程?

Node.js 如何在Express server中阻止数据库承诺阻止主线程?,node.js,express,Node.js,Express,我有一个NodeJS服务器,我尝试使用承诺来调用我的数据库,这样我的服务器仍然能够提供其他客户机更快的查询 下面是我能做的最简单的代码: const express = require('express'); const server = express(); const moment = require('moment'); require('dotenv').config(); const slowRoute = require('./routes/slow'); server.use(

我有一个NodeJS服务器,我尝试使用承诺来调用我的数据库,这样我的服务器仍然能够提供其他客户机更快的查询

下面是我能做的最简单的代码:

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,则第二个控制台日志“slow route”仅在第一次完成后触发,结果在12秒后出现,而不是6秒

过去我成功地同时做了两次调用,我只是不明白为什么现在不能做。

等待池。查询('SELECT pg_sleep(6)')是否停止其余代码直到完成

你能做什么

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]);
  })
})
Ps:我不运行这个代码