2017-02-02 44 views
0

在我的节点js程序中,我查看我的猫鼬数据库,并查找并返回该集合中的值 - 只有一个值。访问变量外猫鼬找到方法 - 节点js

var myValueX; 
myCollection.find(function(err, post) { 
     if (err) { 
      console.log('Error ' + err) 
     } else { 
      myValueX = post[0].valuex; 
     } 
    }); 

console.log('Have access here' + myValueX); 

现在,我希望能够使用此查找方法外的myValueX。我怎样才能做到这一点?

当我尝试上述的console.log,我得到了一个未定义回来 - 这是可能实现

+0

没有,因为'的console.log()'find操作完成,其回调被触发之前运行。你必须改变代码的设计来做你想做的事情。 –

回答

0

要访问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) 
    })