2016-12-18 1 views
0

Ich bin neu in JavaScript und NodeJS und muss dieses Problem schnell lösen.So greifen Sie auf ein Objekt zu, das in einer Funktion mit einer anderen Funktion erstellt wurde

Wenn ich versuche, das Objekt mit console.log anzuzeigen, bekomme ich undefiniert, was ziemlich offensichtlich scheint. Aber was wäre ein einfacher Weg, um das Object 'obj', das oben erstellt wurde, anzuzeigen?

UPDATE: Nur um zu verdeutlichen, wird console.log hier nur als Beispiel verwendet. Ich muss auf das Objekt von außerhalb dieser Funktion zugreifen, aber ich kann.

Vielen Dank im Voraus!

+0

Verschieben Sie den Aufruf console.log in den Callback, wo Sie 'obj' definiert haben. –

+0

Ich lege einfach die console.log nach draußen, um zu verdeutlichen, dass ich von außen auf das Objekt zugreifen muss. Ich brauche einige Daten von diesem Objekt innerhalb einer anderen Funktion. Als ob es eine globale Variable wäre. Danke trotzdem. –

+0

versuchen, Daten zu trösten, wird es außerhalb definiert werden – anwerj

Antwort

0

Zwei Dinge gehen hier vor.

1) Sie verwenden ein Versprechen und versprechen asynchron zu lösen. Gute Faustregel ist, dass jeder Code, der mit .then(...) endet, ein Versprechen ist. Das bedeutet, dass der darunter liegende Code ausgeführt werden kann, bevor das Versprechen abgeschlossen ist, und wenn er diese Werte liest, bevor das Versprechen abgeschlossen ist, werden sie als undefined gelesen.

2) Sie verwenden die let Schlüsselwort Ihre Variable zu definieren, das heißt, es wird nur im Rahmen definiert werden:

row => { 
      let obj = { 
       countryid: row.IdPais, 
       country: row.NombrePais 
      }; 
      data.push(obj); 

      // Show the object where it is defined 
      console.log(obj); 
      } 
+0

In diesem Fall funktioniert es, aber console.log ist nicht genau das, was ich brauche. Ich muss auf das Objekt zugreifen, als wäre es eine globale Variable von einer anderen Funktion. Danke trotzdem. –

+0

Haben Sie in Ihrem 'data' Array keinen Zugriff darauf? – Mike

+0

Nur innerhalb der Pfeilfunktion. –

0

Sie müssen dies tun: -

async database() 
{ 

     try { 
      const table= await connection(getSQL2); 
      if (table!== null) 
      { 
      table.forEach(row=> { 
       let obj = { 
          countryid: row.IdPais, 
          country: row.NombrePais 
         }; 
      console.log('This will resolve the promise',obj); 
      } 
      else 
      { 
      //anything needed 
      } 
      } 
      catch (error) 
      { 
         // Error retrieving data 
      } 
} 

async und await sind die Schlüsselwörter, die parallel verwendet werden. await Das Schlüsselwort lässt das Steuerelement nicht herunter, bis Daten abgerufen werden.

+0

Vielen Dank für Ihre Antwort. Ich denke, das wäre der richtige Weg. Aber ich bin immer diese: Asynchron-Datenbank() { ^^^^^^^^ Syntaxerror: Unerwartete Kennung –

+0

Ich habe diesen Ansatz versucht, meine Probleme gelöst wurden und die den richtigen Weg, um das Versprechen zu lösen. Verwenden Sie diese Funktion im Knoten? – Codesingh

+0

Ich verwende Knoten 7.1.0, um einige SQL-Tabellen in MongoDB-Sammlungen zu importieren. –

0

können Sie eine global variable erstellen und den Wert innerhalb der that-Funktion dieser Variablen zuweisen.

Dann können Sie auf die Variable obj auch außerhalb der Funktion zugreifen.

var temp;//declare a global variable here. 
connection(getSQL2) 
.then((table)=> { 
    table.forEach(row=> { 
     let obj = { 
      countryid: row.IdPais, 
      country: row.NombrePais 
     }; 
     data.push(obj); 
     temp = obj;//assign value to global variable here 
     }); 

    }); 

console.log(temp);//you can access the 'obj' using temp 

Hoffe, das hilft Ihnen.

+0

Leider nicht. Noch undefiniert. –

+0

Tut mir leid, Sie müssen 'console.log (temp)' tun, ich werde meine Antwort bearbeiten. –

Verwandte Themen