当用户进入页面时,我想检查用户是否已将数据输入到firebase位置 . 我为此目的使用此代码:
(在提供者:)
checkPath(): Promise<boolean> {
return new Promise((resolve, reject) => {
firebase.database().ref('/Data')
.child(firebase.auth().currentUser.uid).child("dataID")
.on('value', data => {
resolve(data.exists());
});
});
}
(在页面内:)
ionViewDidEnter() {
if(this.Provider.checkPath() === true) {
//Here I retrieve data from firebase
}
}
但现在出现以下错误:
类型'Promise <any>'不能赋值为'boolean' .
我的第一个问题是:在使用Promise检查是否有来自用户的数据时,我是否正确?在我看来,需要一个承诺,否则页面会做它的事情,但可能是数据没有被加载 .
第二个问题是:如何从promises中获取布尔值返回以检查数据是否在该位置?或者你还有其他解决办法吗?
2 回答
那么问题是你直接将返回的promise与布尔值进行比较
Provider.checkPath() === true
.由于promise只是一个值的包装器,为了获得promise中包含的值(在您的情况下是布尔值),您需要使用
then
方法 .代码看起来就像那样
顺便说一句,是的,使用
Promise
是一个非常好的主意,这正是他们的用例:)首先,你得到的错误是由最新的
TypeScript
版本引起的 . 它们要求您在new Promise<T>
语句中指定此Promise
的返回类型:第二点是,你无法检查你的Promise回报 . 您应该使用TypeScript中的await / async(我更喜欢):
或者使用基本的Promise处理:
实际上,我现在正确地阅读了你的问题,我说的第一件事并不是's causing your error. That'肯定是因为你试图将
Promise
与boolean
进行比较 . 不管怎样做't mean that you shouldn'不管怎么说:)