2017-01-04 3 views
0

Ich habe derzeit ein Problem beim Zugriff auf emoji_map außerhalb der then Bereich und ich weiß nicht, wie es geht.Wie kann auf das JSON-Objekt außerhalb der Fetch-API-Antwort zugegriffen werden?

Hier ist mein Code:

if (req) { 
    fetch(req).then(function(response) { 
     return response.json(); 
    }).then(function(response) { 
    /* start to observe */ 
    emoji_map = response.emoji_map; 
    console.log(emoji_map); 
    }); 

} 

Als ich console.log (emoji_map) zu tun; außerhalb If Schleife Ich kann nicht auf die zugewiesene Antwort zugreifen. Kann jemand helfen?

+0

Make beziehen sicher, dass Sie asynchrones JavaScript verstehen, gibt es viele Artikel und Tutorials. – wOxxOm

+0

Sie können nicht auf eine Variable zugreifen, bevor sie verfügbar ist, und zwar genau und nur innerhalb des Bereichs 'then'. –

Antwort

1

Ich empfehle Ihnen, lesen Sie mehr über JavaScript lexical Scoping und Verschlüsse auf MDN: https://developer.mozilla.org/en-US/docs/Web/JavaScript/Closures.

function init() { 
    var name = "Mozilla"; // name is a local variable created by init 
    function displayName() { // displayName() is the inner function, a closure 
    alert(name); // use variable declared in the parent function  
    } 
    displayName();  
} 
init(); 

init() erstellt einen lokalen Variablennamen und dann eine Funktion display() aufgerufen. displayName() ist eine innere Funktion, die innerhalb von init() definiert ist und nur innerhalb des Rumpfes dieser Funktion verfügbar ist. displayName() hat keine eigenen lokalen Variablen, jedoch hat es Zugriff auf die Variablen der äußeren Funktionen und kann daher den in der übergeordneten Funktion deklarierten Variablennamen verwenden.

+0

Die Frage hat nichts mit Verschlüssen zu tun. Es hat mit dem Zugriff auf einen asynchron verfügbaren Wert in einem Kontext zu tun, bevor dieser verfügbar ist. –

+0

Die Frage war nicht gerade extra klar. Ich dachte sein Problem war, dass die Variable nicht definiert war, auch nachdem das Versprechen gelöst wurde. – Marco

+0

Rechts. Aber woher weißt du, dass das Versprechen gelöst wurde, wenn du nicht in dem Teil deines Codes bist (der 'then'-Handler), der definitionsgemäß dort aufgelöst wurde? –

0

Was Sie eine globale Variable außerhalb der Abruf-Anweisung deklarieren können, und die Antwort in diesen Variablen füllen, sagen in Ihrem Fall

  var sampleData; 
      if (req) { 
      fetch(req).then(function(response) { 
       sampleData = response.json(); 
       return response.json(); 
      }).then(function(response) { 
       /* start to observe */ 
       emoji_map = sampleData.emoji_map; 
       console.log(emoji_map); 
      }); 

      } 

    OR 

     fetch('https://davidwalsh.name/some/url').then(function(response) { 
      return //... 
     }).then(function(returnedValue) { 
     // ... 
     }).catch(function(err) { 
      // Error :(
     }); 

Sie den obigen Code versuchen kann oder this

+0

Dies versteht nicht die Grundlagen der Asynchronität. –

Verwandte Themen