Javascript mongoose find方法外部的Access变量-节点js

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(

在我的node js程序中,我查看我的mongoose数据库,找到并返回该集合中的值——只有一个值

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()
在完成查找操作并触发其回调之前运行。你必须改变代码的设计来做你想做的事情。