我在React应用程序中的Firebase批处理写入遇到一些困难。
使用以下异步功能:
export const addCollectionAndDocuments = async (collectionKey, objectsToAdd) => {
const collectionRef = firestore.collection(collectionKey);
const batch = firestore.batch();
objectsToAdd.forEach(obj => {
const newDocRef = collectionRef.doc();
batch.set(newDocRef, obj);
});
return await batch.commit();
}
如果我以类似以下方式在应用程序中调用该函数:
var list = [
{ date: '12/1/2011', reading: 3, id: 20055 },
{ date: '13/1/2011', reading: 5, id: 20053 },
{ date: '14/1/2011', reading: 6, id: 45652 }
];
addCollectionAndDocuments('foo-collection', list)
.then((value) => {
console.log('then ' + value);
})
.catch((e) => {
console.log('catch', e);
})
.finally(() => {
console.log('finally');
});
这不会做任何事情,除非,我会在我的Firebase配置对象中修改/使我的Firebase API密钥无效(即,在我的应用程序中,修改API密钥,使其不对应于我的实际Firebase API密钥),然后运行代码。在那种情况下,它工作得很好,这让我感到困惑。
我正在以类似以下方式初始化firebase:
import firebase from 'firebase/app';
import 'firebase/firestore';
import 'firebase/auth';
const config = {
apiKey: "xxxxxx",
authDomain: "xxxxxx",
databaseURL: "xxxxxx",
projectId: "xxxxxx",
storageBucket: "xxxxxx",
messagingSenderId: "xxxxxx",
appId: "xxxxxx"
};
firebase.initializeApp(config);
我已经尝试了很多次,但是直到我使Firebase API密钥无效之前,什么都没有发生。在那之前,我什至没有达到我的诺言中的任何“那么”,“抓住”或“最终”方法。
上面的代码在一个简单的create-react-app中,我目前正在'react-scripts start'开发服务器上运行它。
如果我改为在静态html文档中运行批处理写入代码,则它可以完全按预期工作:
<!DOCTYPE html>
<html>
<body>
<script src="https://www.gstatic.com/firebasejs/3.7.4/firebase.js"></script>
<script src="https://www.gstatic.com/firebasejs/7.2.2/firebase-firestore.js"></script>
<script>
// Initialize Firebase
var config = {
apiKey: "x",
authDomain: "x",
databaseURL: "x",
projectId: "x",
storageBucket: "x",
messagingSenderId: "x",
appId: "x"
};
firebase.initializeApp(config);
function myFunction() {
// Get a new write batch
const firestore = firebase.firestore();
var batch = firestore.batch();
// Set the value of 'NYC'
var nycRef = firestore.collection("cities").doc("NYC");
batch.set(nycRef, {name: "New York City"});
// Commit the batch
batch.commit().then(() => {
console.log('done');
});
}
</script>
<p>run stuff</p>
<button onclick="myFunction()">Run batched write</button>
</body>
</html>
知道这是什么意思吗?
谢谢