使用Object.assign wait时参数列表后未捕获的语法错误:缺少)

使用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中

我试图用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中运行它时,它显示以下错误:

参数列表后未捕获的语法错误(缺少)

我在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)调用之后如何处理数据。