2017-02-09 108 views
4

我试图将数据从firebase复制到使用角度2的数组。但我无法将数据推入数组。如何将firebaselistobservable中的数据存储到数组中?

下面的代码:

变量:

uid: string = ''; 
agencyItems: FirebaseListObservable<any[]>; 
trackerItems: FirebaseListObservable<any[]>; 
agencyID: any[] = []; 

的getData()

this.af.auth.subscribe(auth => { 
     if (auth) { 
      this.uid = auth.auth.uid; 
     } 
    }); 

    this.getAgencyData(); 

    console.log("AgentID: ",this.agencyID); 
    console.log("Array Length = ",this.agencyID.length); //PROBLEM HERE: Array agencyID is still 0. 

    this.getTrackerData(); 

getAgencyData():

console.log("Fetching agency data"); 
    this.agencyItems = this.af.database.list('/agencies/',{preserveSnapshot:true}); 
    this.agencyItems.subscribe(snapshots => { 
     snapshots.forEach(snapshot => { 
      console.log(snapshot.val()._id); 
      this.agencyID.push(snapshot.val()._id); 
     }); 
    }); 

getTrackerData():

for (let i = 0; i < this.agencyID.length; i++)  
    { 
     console.log("Fetching Tracker data"); 
     this.trackerItems = this.af.database.list('/tracker/' + this.agencyID[i]); 
     this.trackerItems.subscribe(trackerItems => trackerItems.forEach(Titem => 
      console.log("Tracker name: " + Titem.name), 
     )); 
    }  

这里是调试控制台截图:

console screenshot

因为我是一个新手,以网页编程一些代码可能看起来完全没有必要。

我在做什么错在这段代码?我该如何执行相同的操作。

回答

3

问题是您正在检查数组长度的位置,或更好的时候。您在获取数据时进行异步调用,但在数据返回之前您正在检查数组的长度。因此该数组仍然是空的。

尝试在getAgencyData()如下:

console.log("Fetching agency data"); 
this.agencyItems = this.af.database.list('/agencies/',{preserveSnapshot:true}); 
this.agencyItems.subscribe(snapshots => { 
    snapshots.forEach(snapshot => { 
     console.log(snapshot.val()._id); 
     this.agencyID.push(snapshot.val()._id); 
     console.log("Array Length = ",this.agencyID.length); // See the length of the array growing ;) 
    }); 
    // EDIT 
    this.getTrackerData(); 
}); 
+0

那么,如何等到数据完全取? –

+0

数据将在'.subscribe()'块的末尾被完全提取。但是,如果不知道您想要对阵列长度或数据本身做什么,就很难告诉您最佳的方法或位置。 –

+0

我只是想将所有'到达'数据存储到数组中。 –

相关问题