javascript - 添加固定参数等待回调

标签 javascript asynchronous d3.js callback

我正在尝试使用 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/

相关文章:

javascript - 数组的长度属性如何在 javascript 中工作?

javascript - 如何同时运行两个具有不同功能的案例?

javascript - 如何判断是否已使用 await 调用异步函数

用于访问 svg transform translate 的 x/y 值的 Javascript

javascript - d3.js 使用 python websocket 数据实时更新 svg 行

javascript - JQuery 按钮将侧边菜单移动到左侧并使用动画将内容 View 调整为全宽不工作

javascript - 不知道为什么这不起作用 - Javascript 基本增量函数

java - 使用 Java 进行异步 http 调用的最轻量级方法是什么?

javascript - 在信息窗口调用 setContent 后 Jquery 选择器失败

d3.js - 从html获取d3.js数据