Javascript mongoose find方法外部的Access变量-节点js
在我的node js程序中,我查看我的mongoose数据库,找到并返回该集合中的值——只有一个值Javascript mongoose find方法外部的Access变量-节点js,javascript,node.js,mongoose,Javascript,Node.js,Mongoose,在我的node js程序中,我查看我的mongoose数据库,找到并返回该集合中的值——只有一个值 var myValueX; myCollection.find(function(err, post) { if (err) { console.log('Error ' + err) } else { myValueX = post[0].valuex; } }); console.log(
var myValueX;
myCollection.find(function(err, post) {
if (err) {
console.log('Error ' + err)
} else {
myValueX = post[0].valuex;
}
});
console.log('Have access here' + myValueX);
现在,我希望能够在这个find方法之外使用myValueX。我该怎么做
当我尝试上面的console.log时,我得到了未定义的返回-这是否可能实现访问
myValueX
在find
的回调中分配后,您有两个选项,第一个(自然)在回调本身内部,或者在回调调用的函数中,将myValueX
作为参数发送到该函数
在我看来,更好的解决办法是使用承诺
使用解决方案的简单承诺如下:
function findPromise(collection) {
return new Promise((resovle, reject) => {
collection.find((err, post) => {
if (err)
return reject(err)
// if all you want from post is valuex
// otherwise you can send the whole post
resolve(post[0].valuex)
})
})
}
findPromise(collection)
.then((valueX) => {
// you can access valuex here
// and manipulate it anyway you want
// after it's been sent from the `findPromise`
console.log("valueX: ", valueX)
})
.catch((err) => {
console.log("An error occurred. Error: ", err)
})
否,因为console.log()
在完成查找操作并触发其回调之前运行。你必须改变代码的设计来做你想做的事情。