ОБНОВЛЕНИЕ: я понял это. Спасибо eol за то, что заставили меня задуматься об обещании. Хотя рекомендованный сценарий не помог мне, мышление помогло.
Чтобы объект прошел правильно, мне нужно было начать с самого объекта и реструктурировать код для поддержки этого конца.
var barBuildX = function(csv, domainColumnName, rangeMin, rangeMax, paddingInner, paddingOuter) {
var x = {
rMin: rangeMin,
rMax: rangeMax,
padIn: paddingInner,
padOut: paddingOuter,
domain: (function() {
var dom = [];
d3.csv(csv).then(function(data) {
data.forEach(function(d) {
dom[dom.length] = d[domainColumnName];
});
})
return dom;
})(),
};
console.log(x);
return x;
};
};
Это довольно простая подпрограмма, предназначенная для заполнения объекта полями, необходимыми для удовлетворения функции d3.js scaleBand (). Первая часть этого скрипта работает как положено - строит массив доменных имен на основе «domainColumnName» в предоставленном CSV-файле. Однако вторая часть, где мы на самом деле строим объект «x», который будет возвращен, не работает должным образом - не записывает данные на консоль и не переносит какие-либо данные, которые я пытаюсь передать ей. Это особенно раздражает, когда нужно просто установить значения свойств и вернуть объект для использования в другом месте ... Есть мысли?
var barBuildX = function(csv, domainColumnName, rangeMin, rangeMax, paddingInner, PaddingOuter) {
var dom = [];
d3.csv(csv).then(function(data) {
console.log(data); //this works
data.forEach(function(d) {
dom[dom.length] = d[domainColumnName];
});
console.log(dom); //this works
var x = {
domain: dom,
rMin: rangeMin,
rMax: rangeMax,
padIn: paddingInner,
padOut: paddingOuter
};
console.log(x); //this DOES NOT work
return x; //Undefined... / Type Error
});
};
Было замечено различие в написании переменных, к сожалению, я допустил ошибку при копировании в этот поток. В исходном источнике, который не работает, нет различий в написании переменных.
Я получаю сообщение об ошибке в консоли Chrome: «Uncaught TypeError: Невозможно прочитать свойство 'домен' из неопределенного"
Итак, возвращаемый объект поступает как неопределенный ...