Передача функции обратного вызова в d3.xml?

Скажи я использую 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 ответ

Решение

Вы просто забыли перезвонить 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();
   });
};
Другие вопросы по тегам