Firebase:关于批量写入的混乱

时间:2019-10-28 16:54:00

标签: javascript reactjs firebase google-cloud-firestore react-dom

我在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>

知道这是什么意思吗?

谢谢

0 个答案:

没有答案