【发布时间】:2021-12-24 07:38:41
【问题描述】:
我对异步 javascript 编程比较陌生。在使用 d3 库中的 d3.scv 函数时,我遇到了一个问题,即在异步函数范围内等待来自 d3.csv 的承诺结果时,我可以直接访问已解析的值,但是当我返回此已解析的值时我得到一个未决的承诺。
代码
async function generateCountryData(){
let csvData = await d3.csv("./data/data.csv", (d) => {
return {
"id" : +d["id"], // The '+' turns a string into a number
"country" : d["name"],
"faction" : +d["overlord"]
}
});
let dataArray = csvData.map(Object.values);
// LOG 1
console.log(dataArray);
return dataArray;
}
// LOG 1: Array(58)
// Returns: Promise {<pending>} "fulfilled"[[PromiseResult]]: Array(58)
async function func1() {
let result = await generateCountryData();
// LOG 2
console.log(result);
return result;
}
// LOG 2: Array(58)
// Returns: Promise {<pending>} "fulfilled"[[PromiseResult]]: Array(58)
由于我不想在每次要访问此数组时都定义一个新的异步函数,所以我想知道如何返回一个已定义的已解析值,该值不是待处理的承诺。
【问题讨论】:
-
async、await和d3.csv的整个组合正在伤害我的大脑!说真的,d3.csv已经是一个承诺......您的整个代码可能只是d3.csv(url).then(),您将依赖于检索到的 CSV 的代码放入then。 -
"我不想每次访问这个数组时都定义一个新的异步函数" - 看看this answer
标签: javascript asynchronous d3.js async-await