2017-02-02 3 views
0

In meinem Knoten js-Programm, schaue ich in meine Mungo-Datenbank, und finden und die Werte in dieser Sammlung zurückgeben - es gibt nur einen Wert.Access Variable außerhalb Mungo Suche Methode - Knoten 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); 

Nun möchte ich MyValueX außerhalb dieser Methode finden können. Wie kann ich das machen?

Wenn ich die console.log oben versuchen, bekomme ich undefined zurück - ist das möglich

+0

Nein, denn 'console.log()' läuft, bevor der Suchvorgang abgeschlossen ist und dessen Rückruf ausgelöst wird. Sie müssen das Design des Codes ändern, um das zu tun, was Sie tun möchten. –

Antwort

0

zu erreichen myValueX zuzugreifen, nachdem es in find ‚s Rückruf zugewiesen worden war, haben Sie zwei Möglichkeiten, die ersten (natürlich) befindet sich innerhalb des Callbacks selbst oder innerhalb einer Funktion, die vom Callback aufgerufen wird, an den Sie myValueX als Argument senden.

Die bessere Lösung ist meiner Meinung nach, Versprechen zu verwenden.

Ein einfaches Versprechen betriebener Lösung ist wie folgt:

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) 
    }) 
Verwandte Themen