使用Object.assign wait时参数列表后未捕获的语法错误:缺少)
我试图用D3从中复制分组条形图。我正在Chrome上运行这个脚本,使用D3.v5 在脚本中,我有:使用Object.assign wait时参数列表后未捕获的语法错误:缺少),object,d3.js,async-await,assign,observablehq,Object,D3.js,Async Await,Assign,Observablehq,我试图用D3从中复制分组条形图。我正在Chrome上运行这个脚本,使用D3.v5 在脚本中,我有: var data = Object.assign(await d3.csv("https://gist.githubusercontent.com/mbostock/3887051/raw/805adad40306cedf1a513c252ddd95e7c981885a/data.csv", d3.autoType), { y: "Population" }); 当我在HTML中
var data = Object.assign(await d3.csv("https://gist.githubusercontent.com/mbostock/3887051/raw/805adad40306cedf1a513c252ddd95e7c981885a/data.csv",
d3.autoType), {
y: "Population"
});
当我在HTML中运行它时,它显示以下错误:
参数列表后未捕获的语法错误(缺少)
我在Chrome控制台上试用过,效果很好
HTML文件内容:
var margin={顶部:10,右侧:10,底部:20,左侧:40},
宽度=960-margin.left-margin.right,
高度=500-margin.top-margin.bottom;
var data=Object.assign(等待d3.csv(“https://gist.githubusercontent.com/mbostock/3887051/raw/805adad40306cedf1a513c252ddd95e7c981885a/data.csv,d3.同源型),{y:“群体”};
您想要的是将代码从笔记本移动到通用JavaScript脚本。在这种情况下,您不能像以前那样使用wait
如果你看一下,你会非常清楚地看到:
wait操作符用于等待承诺它只能在异步函数内部使用。(强调矿山)
这就是说,这个async
函数与您的代码一起工作:
(异步函数foo(){
const data=Object.assign(等待d3.csv(“https://gist.githubusercontent.com/mbostock/3887051/raw/805adad40306cedf1a513c252ddd95e7c981885a/data.csv“,d3.自动打字){
y:“人口”
});
console.log(数据)
})();代码>
请使用
<script type="text/javascript">
而不是
<script>
非常感谢您的回答。澄清一下,d3.csv不是一个异步函数吗?我在谷歌上搜索了一下,发现它似乎是异步的。第二个问题,我不明白为什么它可以在谷歌chrome控制台中工作,而不能在纯javascript中工作。你能解释一下吗?是的,它是异步的,但这并不能改变浏览器处理await
的方式。你能帮我回答第二个问题吗:为什么await可以在谷歌chrome控制台中工作,但不能在javascript中工作?@Frank它不仅仅是chrome,它可以在大多数浏览器的开发工具中工作。这可能是一个很好的阅读:@Frank此链接更好,它很好地解释了为什么您不需要控制台中的async
:。我在答案中添加了这个链接,我还发现这个链接有助于我理解在异步d3.csv(或d3.json)调用之后如何处理数据。