将回调函数传递给d3.xml?

时间:2016-06-25 00:42:21

标签: javascript d3.js scope callback

假设我在函数中使用d3.xml()将SVG资产加载到浏览器中。如果我想在资产加载到内存后调用回调函数(“cb”),我该怎么做?

作为示例代码,我尝试了以下内容:

var svg_xml = null;
var load_svg = function(svg_path, cb) {
    d3.xml(svg_path, "image/svg+xml", function(error, xml) {
        if (error) throw error;
        svg_xml = xml;
        if (cb) cb;
    });
};

然后测试脚本中其他地方的回调:

load_svg("/foo/bar/baz.svg", function() {
    console.log("baz.svg loaded!");
});

SVG最终加载到内存中。但是,不会调用回调 - 没有日志消息结果。

cb内的load_svg范围是否存在问题,d3.xml()不知道cb是什么?

1 个答案:

答案 0 :(得分:2)

您忘记致电回拨cb()

var svg_xml = null;
var load_svg = function(svg_path, cb) {
    d3.xml(svg_path, "image/svg+xml", function(error, xml) {
       if (error) throw error;
       svg_xml = xml;
       if (cb) cb();
   });
};