Así que estoy convirtiendo un archivo CSV en una matriz usando la función d3.csv. Actualmente estoy haciendo esto colocando esta función dentro de una función asíncrona y luego esperando los resultados que devuelve la función d3.csv. Cuando imprimo el valor final (LOG 1), obtengo la matriz correcta. IMG: Matriz correcta como resultado de LOG 1
Función de conversión:
async function generateCountryData() { let dataArray = await d3.csv("./data/data.csv", (d) => { return { "id" : +d["id"], // The '+' turns a string into a number "country" : d["name"], "faction" : +d["overlord"] } }).then((data) => { return data.map(Object.values) }); // LOG 1 console.log("Proto Data Array: ", dataArray); return dataArray; } El problema que estoy encontrando es que cuando uso la función para obtener la matriz y registro los resultados de la función fuera de su alcance, obtengo una Promise {<pending>} donde los [[PromiseResults]] son la matriz correcta.
Llamando a la función de conversión:
countryDataArray = generateCountryData(); // LOG 2 console.log("Country Data (Ary.): ", countryDataArray);IMG: Promesa Pendiente como resultado de LOG 2
Me gustaría saber cómo obtengo una matriz que no es una promesa pendiente como resultado de llamar a la función de conversión.
Encontré una manera de resolver la promesa que recibí. Hice esto haciendo que la main function en lugar de la función de generate function asíncrona; luego, usando la función de generate function como una resolve function cuya salida se espera después de ser llamada.
Función de generación:
function generateCountryData(){ let dataArray = d3.csv("./data/data.csv", (d) => { return { "id" : +d["id"], "country" : d["name"], "faction" : +d["overlord"] } }).then((data) => { return data.map(Object.values) }); // LOG 1 console.log("Proto Data Array: ", dataArray); return dataArray; }Función principal que llama a la función de generación:
async function build(){ countryDataArray = await generateCountryData(); console.log("Country Data (Ary.): ", countryDataArray); drawMap(countryDataArray); } build();