Javascript 将Firestore数据添加到DataTable

Javascript 将Firestore数据添加到DataTable,javascript,datatables,google-cloud-firestore,Javascript,Datatables,Google Cloud Firestore,我试图从Firestore数据库将数据加载到dataTable中,但不起作用。是否有其他方法将数据从firestore推送到阵列 $(文档).ready(函数(){ $('#pageName').html('Dashboard'); $('#pageName li').html('Dashboard'); var数据集=[]; x=1 设db=firebase.firestore(); db.collection(“仓库”).where(“useremail”),“==”,firebase.au

我试图从Firestore数据库将数据加载到dataTable中,但不起作用。是否有其他方法将数据从firestore推送到阵列

$(文档).ready(函数(){
$('#pageName').html('Dashboard');
$('#pageName li').html('Dashboard');
var数据集=[];
x=1
设db=firebase.firestore();
db.collection(“仓库”).where(“useremail”),“==”,firebase.auth().currentUser.email).get().then(函数(querySnapshot){
querySnapshot.forEach(函数(doc){
dataSet[x][1]=doc.data().name;
数据集[x][2]=doc.data().useremail;
数据集[x][3]=文档数据()地址;
x++
});
});
$('#示例')。数据表({
数据:数据集,
栏目:[
{标题:“姓名”},
{标题:“地址”},
{标题:“用户电子邮件”}
]
});
});

数据从Firestore异步加载。您可以通过一些
console.log
语句最好地了解这对程序的影响:

console.log("Before running query");
db.collection("warehouses").where("useremail","==",firebase.auth().currentUser.email).get().then(function(querySnapshot) {
   console.log("Got data");
});
console.log("After running query");
运行此代码时,您将获得以下输出:

在运行查询之前

运行查询后

得到数据

这可能不是您期望的输出顺序。但它完全解释了代码不起作用的原因:在调用
$('#示例').DataTable({data:dataSet,…
时,数据尚未加载


由于数据是从Firebase异步加载的,因此需要访问myst数据的任何代码都应该在
然后
回调中,或者从那里调用

因此,最简单的修复方法是从回调中填充数据表:

db.collection("warehouses").where("useremail","==",firebase.auth().currentUser.email).get().then(function(querySnapshot) {
    querySnapshot.forEach(function(doc) {

            dataSet[x][1] = doc.data().name;
            dataSet[x][2] = doc.data().useremail;
            dataSet[x][3] = doc.data().address;
            x++
    });
    $('#example').DataTable( {
                    data: dataSet,
                    columns: [
                            { title: "Name" },
                            { title: "Address" },
                            { title: "User email" }
                    ]
            });
});
谢谢你,弗兰克 这是工作代码。 (没有按钮就无法工作,所以我添加了一个)

获取仓库
函数getDatainTable(){
设db=firebase.firestore();
var数据集=新数组();
var i=1;
db.collection(“仓库”).where(“useremail”),“==”,firebase.auth().currentUser.email).get().then(函数(querySnapshot){
querySnapshot.forEach(函数(doc){
push([doc.data().name,doc.data().useremail]);
i=i+1;
});
$('#示例')。数据表({
数据:数据集,
栏目:[
{标题:“姓名”},
{标题:“电子邮件”}
]
} );
});
}
$(文档).ready(函数(){
$('#warehousesGetDataBTN')。单击(函数(){getDatainTable()});
});

如果Firestore中的表中添加了一条新记录,此方法是从表中提取所有记录,还是仅提取新记录并将其附加到datatable?它将添加所有记录。
<button type="button"  id="warehousesGetDataBTN">Get Warehouses</button>
<table id="example" class="display" width="100%"></table>

<script>

function getDatainTable() {

    let db = firebase.firestore();
    var dataSet = new Array();
    var i=1;

   db.collection("warehouses").where("useremail","==",firebase.auth().currentUser.email).get().then(function(querySnapshot) {
            querySnapshot.forEach(function(doc) {

                    dataSet.push([doc.data().name, doc.data().useremail]);
                    i=i+1;

});


    $('#example').DataTable( {
            data: dataSet,
            columns: [
                    { title: "Name" },
                    { title: "Email" }
            ]
    } );
    });
}

$(document).ready(function(){

    $( '#warehousesGetDataBTN' ).click(function(){getDatainTable()});

});
</script>