添加固定参数以等待回调

时间:2016-07-16 01:44:57

标签: javascript asynchronous d3.js callback

我试图使用d3的队列,延迟和等待异步加载一些文件。问题是在循环中尝试这样做,并且对于循环中的每个项目,将获取的数据存储在字典中:

.await.myFunc(geo)

在myFunc中,我想访问geo来填写字典中的相应键,但是将它们传递到undefined内会在myFunc中打印mylist = ["alice", "bob", "greta"] funcdict = dict(((y, lambda x: x==str(y)) for y in mylist)) funcdict['alice']("greta") #True funcdict['alice']("alice") #False funcdict['greta']("greta") #True

我不知道这个问题是关于Javascript的回调函数,还是D3的await(),或者两者兼而有之。

有什么建议吗?

由于

2 个答案:

答案 0 :(得分:2)

您可以使用:

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

答案 1 :(得分:0)

您可以将其添加为任务,以便将其传递到myFunc。

queue()
  .defer(d3.json, 'assets/data/geo/' + geo + '/' + geo + '.json')
  .defer(d3.csv,  'assets/data/geo/' + geo + '/' + geo + '_info.csv')
  .defer(callback=>callback(geo))
  .await(myFunc);
...
function myFunc(error, jsonData, csvData, geo) {
    console.log(geo);
}