我目前正致力于使用前端框架Ionic和angularjs与打字稿的移动应用程序,以及后端我使用firebase。我的问题是,当我调用我的firebase nosql数据库时,我无法将我的项目放入一个打字稿数组中,以便将数据输入到屏幕上,因为当我调用包含值的变量时,它会被视为未定义。这是我的代码:
getSingleDatabase(){
this.collectionReference=this.db.collection('posts');
this.collectionReference.get()
.then(snapshot =>{
snapshot.forEach(doc => {
this.firstGet.push(doc.data());
});
})
.catch(err =>{
console.log(err);
});
return this.firstGet;
}
答案 0 :(得分:1)
Firstore API是异步的,这意味着你对get()的调用会立即返回一个promise,指示fetch实际完成的时间。可能需要任何时间,直到您正在寻找的文件履行承诺。因此,您的getSingleDatabase函数将在this.firstGet
中数据可用之前返回。如果在代码的每个阶段都放置日志语句,您将能够看到我的意思。
知道数据何时完全可用的唯一方法是使用get()返回的promise,这意味着在履行承诺之前,您不应期望this.firstGet
包含任何内容。
Please read more about why Firebase APIs are asynchronous以及对他们的期望。