Передача функции обратного вызова в 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();
});
};