node.js - NodeJs,如何访问模块内的变量
问题描述
我在模块外部创建了一个布尔变量,并尝试更改模块内部的变量,但是当我在模块外部调用变量时,它返回旧值,而不是模块中的值。
var namecontroll = false;
dbo.collection('users').findOne({name: data.name}, (ferr, fres) => {
if (ferr) throw ferr
if (fres) {
var namecontroll = false;
io.emit('signup feedback',"This username was taken by another user.");
}
else {
var namecontroll = true;
}
db.close;
})
当我通过console.log控制模块中的值时,它可以返回'true'。但是当我控制模块时,即使提供了条件,它也会返回“false”。我该如何解决这个问题?
解决方案
首先要考虑到您的代码是异步的,您可以在函数执行完成之前检查变量值。至于它的结构,您在函数内部namecontroll
使用关键字重新声明变量var
,这意味着您在函数内部创建新变量而不是更改它的值。尝试做这样的事情:
var namecontroll = false;
dbo.collection('users').findOne({name: data.name}, (ferr, fres) => {
if (ferr) throw ferr
if (fres) {
namecontroll = false;
io.emit('signup feedback',"This username was taken by another user.");
}
else {
namecontroll = true;
}
db.close;
})
推荐阅读
- android - 尝试设置 imageView 的宽度以匹配 TextView 的宽度
- c++ - 是否需要 mutex() 一次安全地访问具有 2 个线程的数组的不同元素?
- oracle - 错误:-->PLS-00382:表达式类型错误
- javascript - 在 javaScript 中迭代后更改对象数组中的单个值
- javascript - javascript中带有过滤器的元素计数器
- python - python中的目录压缩
- angular - NPM-AUDIT 发现高漏洞。我应该做些什么?
- css - 边框半径不依赖于高度和宽度
- bash - 如何在命令行上使用 MediaInfo 以 MBps 显示我的视频比特率 --Inform
- matrix - 如何使用 R 用随机数替换矩阵中的 NA?