所以我正在使用d3.CSV函数将CSV文件转换为数组。我目前正在将此函数放入一个异步函数中,然后等待d3.csv函数返回的结果。当我打印最终值(LOG1(时,我确实得到了正确的数组。IMG:LOG 1 的结果是正确的数组
转换功能:
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;
}
我遇到的问题是,当我使用该函数获取数组,并在其范围之外记录函数的结果时,我会得到一个Promise {<pending>}
,其中[[PromiseResults]]
是正确的数组。
调用转换功能:
countryDataArray = generateCountryData();
// LOG 2
console.log("Country Data (Ary.): ", countryDataArray);
IMG:作为LOG 2 结果的PromisePaying
我想知道如何获得一个数组,它不是一个挂起的promise,作为调用转换函数的输出。
我找到了一种方法来解决我得到的承诺。我通过使main function
而不是generate function
成为异步函数来实现这一点;则使用CCD_ 5作为CCD_。
生成函数:
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;
}
调用生成函数的主函数:
async function build(){
countryDataArray = await generateCountryData();
console.log("Country Data (Ary.): ", countryDataArray);
drawMap(countryDataArray);
}
build();