我遇到了一些非常奇怪的情况,实际上无法理解正在发生的事情。感谢您对以下原因的解释。
我有带有express和express-session的nodejs服务器
我需要有一个端点,该端点将异步启动一些流,这意味着客户端发送命令开始耗时,并且客户端不会等到流完成。流程本身应该做一些需要时间的事情,然后将结果存储在会话中。
另一个enpoint随后将在任何时间点从会话返回值
但是问题是会话没有持续。
这是我的server.js的最小版本,它重现了问题
const express = require('express');
const session = require('express-session');
const app = express();
app.use(session({
secret: 'testsecret',
name: 'testmytresure',
saveUninitialized: false,
}));
const delayedResponse = () => new Promise(resolve=> setTimeout(() => resolve(`done ${new Date()}`), 200));
const startAsyncFlow = async session => {
const result = await delayedResponse(); //if remove this call and make result static value - everything works
session.test = `Result value ${result}`;
session.save();
}
app.get('/start', (req, res) => {
startAsyncFlow(req.session);
res.json('started');
})
app.get('/check', (req, res)=> {
res.json(req.session);
})
app.listen(8081, () => console.log(`Listening on port 8081`));
我的packages.json
{
"name": "isitreallybug",
"private": true,
"scripts": {
"start": "nodemon server.js"
},
"dependencies": {
"express": "^4.17.1",
"express-session": "^1.17.0",
"nodemon": "^2.0.1"
}
}
奇怪的是:
await something()
放在
“ startAsyncFlow()”的结尾-会话已更新有人可以解释发生了什么吗?为什么等待后我无法与会话交互? 预先感谢