javascript - JavaScript 回调和变量
问题描述
我有这个代码:
var user;
app.use(
"/projects",
(req, res, next) => {
user = req.user;
next();
},
new DashboardService(user)
);
但是,由于user
在回调中重新定义,它的值没有被保存,因此当它创建 a 时DashboardService
,user
返回null
。在回调中重新定义时怎么user
不能返回?null
这是我的意思的一个例子https://codepen.io/lachie-source/pen/RwaQNgq
解决方案
回调中的代码在运行时不会执行app.use
。仅当您的应用程序使用给定路由发出请求时,它才会稍后(并且多次)执行。因此,user
只有在有请求时才分配变量,并为每个新请求重新分配。
对构造函数的调用立即DashboardService
发生。该user
变量在那个时间点还没有值。
如果要DashboardService
为每个请求创建一个单独的实例,则必须在回调函数中执行此操作:
app.use(
"/projects",
(req, res, next) => {
let user = req.user;
new DashboardService(user); // But why create an object that isn't used
next();
}
);
如果您想获得单个用户当前正在与您的应用程序交互的全局状态:这是不可能的,因为您的应用程序可以同时处理不同用户的多个请求。
推荐阅读
- opengl - 遗留 opengl - 渲染立方体地图布局,了解 glTexCoord3f 参数
- reactjs - “错误登录”后如何弹出material-ui小吃栏警报
- jmeter - ForEach 控制器不会运行多个 HTTP 请求
- curl - 如何找到证书 curl 在 Windows 10 中使用的路径?
- python - 如何制作一个使用 discord.py 读取在文本通道中写入多少次消息的机器人?
- ruby-on-rails - 使用 globalize gem 翻译的属性不适用于搜索表单
- javascript - 如何使用 Chart.js 在图表上正确显示数据集
- javascript - 制作
- 列出对象VueJs中的每个数组项
- recursion - 如何使此 Scheme 函数不尾递归?
- firebase - Flutter 无法构建 apk