我目前在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循环我无法访问分配的响应。有人可以帮忙吗?
答案 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