如果在head标记之外使用firebasejavascript,则会显示错误



我使用Firebase处理Firestore数据库。我只是通过方法setDoccollection中插入一个document。如果我在head标记中使用它,它就会起作用。但是,如果我在head标记之外使用它,它会显示错误。完整的代码如下:

<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1">
<title>Firebase app</title>
<script type="module">
import { initializeApp } from "https://www.gstatic.com/firebasejs/9.10.0/firebase-app.js";
import { getFirestore,collection, addDoc, getDocs, doc, setDoc } from "https://www.gstatic.com/firebasejs/9.10.0/firebase-firestore.js"; 
const firebaseConfig = {
apiKey: ".....",
authDomain: "......firebaseapp.com",
projectId: "flutter0000",
storageBucket: "flutter777.appspot.com",
messagingSenderId: "8888115",
appId: "1:9888......"
};
const app = initializeApp(firebaseConfig);
const db = getFirestore(app);


await setDoc(doc(db, "cities", "Cus11"), {
name: "111Los Angeles",
state: "CA",
country: "USA"
});

</script>
</head>
<body>

<h1>FIREBASE APP</h1>

<!-- <script type="module"> -->
<script>


await setDoc(doc(db, "cities", "Cus222"), {
name: "111Los Angeles",
state: "CA",
country: "USA"
});
</script>
</body>
</html>

head标签中的setDoc方法起作用。但在body标签中,setDoc在控制台中显示以下错误:

Uncaught SyntaxError: await is only valid in async functions, async generators and modules test.php:50:2

如果我在body标记中使用<script type="module">而不是仅使用<script>,则控制台中会显示以下错误:

Uncaught ReferenceError: setDoc is not defined

如何使代码在body标签内工作,即在head标签外工作?

在模块中声明变量时,它们不会自动全局声明,因此您必须自己将它们附加到窗口对象。

所以你们有两个选择,把每个firebase方法都附加到窗口中;或者更好的选择是创建调用这些firebase方法的特定函数。我给你举个例子:

<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1">
<title>Firebase app</title>
<script type="module">
import { initializeApp } from "https://www.gstatic.com/firebasejs/9.10.0/firebase-app.js";
import { getFirestore, collection, addDoc, getDocs, doc, setDoc } from "https://www.gstatic.com/firebasejs/9.10.0/firebase-firestore.js";
const firebaseConfig = {
apiKey: ".....",
authDomain: "......firebaseapp.com",
projectId: "flutter0000",
storageBucket: "flutter777.appspot.com",
messagingSenderId: "8888115",
appId: "1:9888......"
};
const app = initializeApp(firebaseConfig);
const db = getFirestore(app);

window.storeCities = async function (name, state, country) {
await setDoc(doc(db, "cities", "Cus11"), {
name,
state,
country 
});
}
await storeCities("111Los Angeles", "CA", "USA")
</script>
</head>
<body>

<h1>FIREBASE APP</h1>

<script type="module">
await storeCities("111Los Angeles", "CA", "USA")
</script>
</body>
</html>

注意,两个脚本都是";模块";类型

相关内容

  • 没有找到相关文章

最新更新