我用过猫鼬和 Node.js ,而我正面临这个问题:
var dbvar;
doc_model
.findOne({aadhar})
.then(()=>{
dbvar=1;
});
paramedic_model
.findOne({aadhar})
.then(()=>{
dbvar=2;
});
console.log(dbvar);
我的MongoDB中有2个集合,我想相应地更改变量dbvar
。但是当到达console.log(dbvar)
时,会显示未定义。
答案 0 :(得分:1)
您是shadowing your variable dbvar
,请尝试在`.then()'函数中删除变量dbvar
声明。
console.log
也应该放在`.then()'内,这样您就可以在建立连接时看到变量被填充(我以为您是异步的)。
var dbvar;
doc_model
.findOne({aadhar})
.then(()=>{
dbvar=1;
console.log(dbvar);
});
paramedic_model
.findOne({aadhar})
.then(()=>{
dbvar=2;
console.log(dbvar);
});
答案 1 :(得分:0)
是的。在JavaScript中,函数中的声明不会泄漏到外部。
您的问题是名称隐藏:通过在函数内部再次声明dbvar
,可以在外部{strong>阴影。在函数中声明dbvar
后,对该名称 dbvar 的所有访问都将进入该内部变量。
我认为只是这样删除:
dbvar
应该工作
另一方面,您必须从当时的回调内部访问结果。在继续操作之前,您应该多看一下Promise概念:)
答案 2 :(得分:0)
如果您想查看dbvar
在改变它的值。
在您的通话中控制台:
var dbvar;
doc_model
.findOne({aadhar})
.then(()=>{
dbvar=1;
console.log(dbvar);
});
paramedic_model
.findOne({aadhar})
.then(()=>{
dbvar=2;
console.log(dbvar);
});
答案 3 :(得分:0)
您正在进行一些异步调用。因此js的工作方式如下,您.findOne().then()
的调用可能需要一些时间(可能要花几秒钟)才能完成,但是在此期间JS将继续遍历您的代码,以便到达console.log(dbvar);
代码的最后一行。此时dbvar
是未定义的,因为您像这样var dbvar
全局声明了它,但没有任何值。一段时间之后,您的.findOne()
将完成,因此dbvar的值将为1和2,但是在未定义时,您已经打印了该值。
您的代码没有问题,只需要将控制台日志放入.then()
调用中
var dbvar;
doc_model
.findOne({aadhar})
.then(()=>{
dbvar=1;
console.log(dbvar);
});
paramedic_model
.findOne({aadhar})
.then(()=>{
dbvar=2;
console.log(dbvar);
});