在开始之前,我承认有几个问题可能听起来与我的标题类似,但是,我读到的所有问题都比我的代码更复杂,解释似乎与我的情况无关。
有人能帮我理解我的代码(下面的代码片段)中发生了什么导致了这个错误吗
未捕获SyntaxError:await仅在异步函数和顶级模块体中有效。
据我所见,导致错误的wait
位于“顶层”主体中。或者是顶级身体的其他意思?谢谢!
编辑区别于其他建议(类似)的问题在这里:我的问题不涉及http获取,一些其他的上下文是不同的,最重要的是,我已经收到了一个答案,解决了我的问题,不像在(孤独的)答案中给出的建议其他问题。因此,虽然我在这里找到了解决办法,但我相信我的问题对广大观众来说是有价值的。
var data;
await getData();
document.body.write(data);
async function getData() {
const res = await fetch("https://jsonplaceholder.typicode.com/posts", {
method: 'GET',
headers: {
'Accept': 'application/json, text/plain, */*',
'Content-type': 'application/json'
}
});
data = await res.json();
}
是的,它是全局代码-在我的脚本中。js文件。我想还有什么比这更“顶级”的呢?
正如在一篇评论中指出的,问题不是“顶层”,而是“在一个模块中”。
只有当type
属性表明要将脚本作为模块加载时,Web浏览器才会将其作为模块加载:
<script type="module" src="script.js"></script>
这将支持导入
(CORS允许),使脚本异步加载,并停止顶层范围全局。
顶级await
表示您试图在async
函数之外使用async/await
语法。解决方法是创建一些函数,例如main
,并将代码放入其中。
async function main() {
var data;
await getData();
document.body.write(data);
}
main();
有一天,顶级异步/等待将得到支持,并有一个建议。同时,您可以使用这个Babel插件来使用它https://babeljs.io/docs/en/babel-plugin-syntax-top-level-await没有包装器功能,如main
。
试图使一个chrome扩展刮一个网站,但它总是在内容完全加载之前(在manifest.json的文档读取后尝试) 每次有人叫我: 还尝试:
我正在做一些非常简单的测试,关于使用csvtojson节点模块将csv文件读取为json格式,我使用下面的代码作为模板 我主要关注的是 //异步/等待使用 const jsonArray=wait csv()。fromFile(csvFilePath); 代码的部分。这是我的密码 无论我用哪种方法尝试,我总是会出现以下错误 或 如果我把代码转换成顶级的 我不明白这为什么不起作用。 编辑:我做了@t
我在Sequelize的节点8上。js 当尝试使用时,出现以下错误。 代码: 获取以下错误: 我做错了什么?
错误出现在第1行,我从Ganache获取帐户,但仅对有效 我应该对此代码进行哪些更改以删除错误?请帮帮我。 如果我删除这一行,错误表明它无法访问帐户,并且在此之后,不起作用。 有没有办法把这段代码做成ASYNC函数的形式?
我正在尝试设置一些数据在使用这个节点js代码的FIRESTAR: 在控制台中运行文件: 给我这个错误: 如何解决这个问题
我有一个异步函数,它在代码中的某个地方按setInterval运行。此函数定期更新一些缓存。 我还有一个不同的同步函数,它需要检索值——最好是从缓存中检索,但如果是缓存未命中,则从数据源检索(我意识到以同步方式进行IO操作是不明智的,但假设在这种情况下需要这样做)。 我的问题是,我希望同步函数能够等待异步函数中的值,但是不可能在非异步函数中使用关键字: 现在,通过将中的逻辑提取到一个新的同步函数中