我有一个变量范围的问题。我调用一个Web服务(异步),并在回调中我想使用这个变量。问题是这个变量已经改变了,所以我想存储它的内容,但它没有工作,因为我想要的。你可以看到,我有一个3文件名的数组。我尝试在服务器上检索它们,如果它们不存在,则创建它们。 var requiredFile被修改为异步。我想保持自己的价值函数 “retrieveAndStoreFiles” 内提前Javascript可变范围,存储内容以在回调中使用它
THX
编辑:根据罗曼的答复
EDIT2
for (var i = 0; i < requiredFiles.length; i++) {
retrieveFile(requiredFiles[i], (function (index) {
console.log(index); //works
var index = index; // index is still not accessible with that
return function (response) { // function(response, index) is not possible, i must have only one parameter
console.log(index); // index is not defined
if (response.items.length == 0) {
console.log(response);
createNewFile(requiredFiles[index], function (response) {
});
}
}
})(i));
}
我尝试更新的代码结合你的解决方案,但它仍然无法工作,有人可以告诉我我失踪了吗? (对不起,我是新来的JavaScript)
EDIT3
function retrieveFile(fileName, callback) {
var request = gapi.client.request({
'path': '/drive/v2/files',
'method': 'GET',
'params': {
q : "title='"+fileName+"'"
}
});
request.execute(function(resp) {
callback(resp);
});
}
当我尝试:
for(var i = 0; i < requiredFiles.length; i++) {
window.setTimeout(
(function(arg1) {
return function() {
console.log(requiredFiles[arg1]);
};
}) (i),
1000
);
}
它的工作原理,但是这个代码不工作:
for(var i = 0; i < requiredFiles.length; i++) {
retrieveFile(requiredFiles[i],
(function(arg1) {
return function(reponse) {
console.log(requiredFiles[arg1]); //arg1 is undefined
};
}) (i)
);
}
这是工作http://jsbin.com/anemep/1/edit – Diode 2013-03-14 10:53:01
你可以让你尝试了什么jsbin演示 – Diode 2013-03-14 10:53:28