d3.json不会立即执行,而是在

时间:2015-07-27 17:50:20

标签: javascript json d3.js breakpoints

所以我在绘制d3图时遇到了并发问题。我的页面可以完美地运行一个图表,但是遇到了多个问题。这是获取json的相关代码。

        json_fetching_id = "json/";
        json_fetching_id += json_ids.splice(0, 1);
        //here is where the d3 is grabbing the json file.
        d3.json(json_fetching_id, function(error, json){
            if (error) return console.warn(error);
            results = results.concat(json);
            callback(results); //the callback function draws the graphs.
         });
        console.info("Retrieving JSON file " + id);

如果我在回调函数中有一个断点,代码会正确地执行多个图形的预期显示,这使我相信它是一个并发问题。

上述函数在for循环中调用我需要绘制的每个数据条目。我关心的是,在调试时,调试器会跳过d3.json调用,而不是执行回调函数。它遍历整个for循环,不执行回调,然后在for循环完成后执行d3.json调用 - >这是我认为并发问题来自哪里。所以我的问题是,是否有一种方法可以确保在转到for循环中的下一个项目之前执行d3.json及其回调,而不是在结束时执行所有操作?

1 个答案:

答案 0 :(得分:1)

回调函数在浏览器检索JSON文件后异步执行。同时,您的for循环继续。这是预期的行为。在所有文件都被检索之后,您需要推迟执行。根据您的偏好和可用的库,您可以使用任何Promises库或jQuery $.Deferred。如果你想坚持D3.js生态系统,Mike Bostock已经为此目的发布了queue.js库。该图书馆的README.md包含了一个恰好是您的用例的示例。