主线程?"/>
如何停止数据库承诺阻止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服务器中的主线程?
发布评论