我正在尝试使用[此处][1]使用
fetch
命令显示的 sql.js 示例从 javascript 读取 sqlite 数据库。然而,当遵循示例并根据我的需要进行调整时,我遇到了错误:
Uncaught SyntaxError: await is only valid in async functions and async generators
这是代码:
<head>
<script src='https://cdn.plot.ly/plotly-latest.min.js'></script>
<script src='sql-wasm.js'></script>
<meta charset="utf8" />
</head>
<body>
<div id='myDiv'></div>
<script>
const sqlPromise = initSqlJs({
locateFile: file => `https://sql.js.org/dist/${file}`
});
const dataPromise = fetch("https://raw.githubusercontent.com/db.db").then(res => res.arrayBuffer());
console.log(dataPromise)
const [SQL, buf] = await Promise.all([sqlPromise, dataPromise])
const db = new SQL.Database(new Uint8Array(buf));
console.log(db)
</script>
</body>
我理解这个错误,但是
fetch
和 initSqlJs
都是 async
所以这让我很困惑。
任何帮助表示赞赏。
[1]: https://sql.js.org/#/?id=using-fetch
该错误基本上是说您需要在异步函数中才能使用
await
- 尚不支持顶级 await
。
将代码包装在异步函数中,然后调用:
<script>
async function main() {
const sqlPromise = initSqlJs({
locateFile: (file) => `https://sql.js.org/dist/${file}`,
});
const dataPromise = fetch(
"https://raw.githubusercontent.com/db.db",
).then((res) => res.arrayBuffer());
console.log(dataPromise);
const [SQL, buf] = await Promise.all([sqlPromise, dataPromise]);
const db = new SQL.Database(new Uint8Array(buf));
console.log(db);
}
main();
</script>
这个人给出了第一个对我来说真正有效的答案,我花了整个早上尝试了五种不同的方法。