2017-01-04 3 views
0

現在、thenの範囲外のemoji_mapにアクセスする際に問題が発生していますが、その方法はわかりません。Fetch APIレスポンス以外のJSONオブジェクトにアクセスするにはどうすればよいですか?

ここに私のコードです:

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); 
    }); 

} 

私は(emoji_map)をCONSOLE.LOG行うと、外部ifループ私は割り当てられた応答にアクセスすることはできません。誰も助けることができますか?

+0

メイクを参照することができると言います非同期のJavaScriptを理解していることを確認してください、多くの記事やチュートリアルがあります。 – wOxxOm

+0

変数が利用可能になる前に変数にアクセスすることはできません。これは 'then'スコープ内でのみです。 –

答えて

1

JavaScriptレキシカルスコープと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()が のdisplayNameと呼ばれるローカル変数名とその関数を作成します()。 displayName()はinit()内で と定義された内部関数であり、その関数の本体内でのみ使用できます。 displayName()には独自のローカル変数はありませんが、外部関数の変数には がアクセスできるため、親関数で宣言されている変数名 を使用できます。

+0

質問はクロージャとは関係ありません。これは、利用可能になる前に、コンテキスト内で非同期的に利用可能な値にアクセスすることと関係しています。 –

+0

質問はあまり明確ではありませんでした。彼の問題は、たとえ約束が解決された後であっても、変数が定義されていないということだと思いました。 – Marco

+0

しかし、あなたがコードの部分(「thenハンドラ」)の部分にない限り、その約束が解決されたことをどのように知っていますか? –

0

あなたの文をフェッチし、その変数で応答を埋めるの外にあなたはグローバル変数を宣言することができますどのような、あなたのケース

  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 :(
     }); 

にあなたは上記のコードを試したりthis

+0

これは非常に非同期の基本を理解することができません。 –

関連する問題