我正在尝试使用 d3 的队列、延迟和等待异步加载一些文件。问题是尝试在循环中这样做,并且对于循环中的每个项目,将获取的数据存储在字典中:
var myDictionary = {};
// e.g. hierarchy = ["State", "County"]
hierarchy.forEach(function(geo) {
queue()
.defer(d3.json, 'assets/data/geo/' + geo + '/' + geo + '.json')
.defer(d3.csv, 'assets/data/geo/' + geo + '/' + geo + '_info.csv')
.await(myFunc);
});
function myFunc(error, jsonData, csvData) {
// need access to geo
console.log(geo);
myDictionary[geo].jsonData = jsonData;
myDictionary[geo].csvData = csvData;
}
在 myFunc 中,我想访问 geo 以填充字典中的适当键,但是将它们传递到 .await.myFunc(geo)
中将打印 undefined
在 myFunc 中。
我不知道这个问题是与 Javascript 的回调函数有关,还是与 D3 的 await() 或两者有关。
有什么建议吗?
谢谢
最佳答案
你可以使用这个:
function myFunc(geo) {
return function(error, jsonData, csvData) {
// geo available here
console.log(geo);
myDictionary[geo].jsonData = jsonData;
myDictionary[geo].csvData = csvData;
};
};
然后:
var myDictionary = {};
// e.g. hierarchy = ["State", "County"]
hierarchy.forEach(function(geo) {
queue()
.defer(d3.json, 'assets/data/geo/' + geo + '/' + geo + '.json')
.defer(d3.csv, 'assets/data/geo/' + geo + '/' + geo + '_info.csv')
.await(myFunc(geo));
});
关于javascript - 添加固定参数等待回调,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38406936/