如何访问Fetch API响应之外的JSON对象?

时间:2017-01-04 12:17:03

标签: javascript

我目前在emoji_map范围之外访问then时遇到问题,我不知道该怎么做。

这是我的代码:

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

}

当我做console.log(emoji_map);外部if循环我无法访问分配的响应。有人可以帮忙吗?

2 个答案:

答案 0 :(得分:1)

我建议您阅读有关MDN上的JavaScript词法范围和闭包的更多信息: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()是一个定义的内部函数   在init()内部,仅在该函数的主体内可用。   displayName()没有自己的局部变量,但它有访问权限   到外部函数的变量,所以可以使用变量名   在父函数中声明。

答案 1 :(得分:0)

您可以在fetch语句之外声明一个全局变量,并在该变量中填充响应,例如在您的情况下

          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