我有一个在其构造函数中调用以下方法的类:
async fetchSSN() {
this.userSSN = await firebase.database().ref(`allUsers/${this.currentUser}/SSN`).once('value');
this.userSSN = this.userSSN.val();
}
基本上,它从用户节点中获取 SSN 的值,并将其存储为名为userSSN
的全局变量。
稍后,我有一种使用 SSN 值的方法,以便从Firebase请求新数据。例如:
async getLastDocument() {
firebase.database().ref(`allSSN/${await this.userSSN}/lastDocument`);
}
我遇到一个奇怪的问题,如果我从应用程序中的另一个类调用getLastDocument()方法,则await
将不等待this.userSSN
从以下构造函数中检索其值:自己的班级。基本上,它将尝试从allSSN/undefined/lastDocument
获取数据-显然不是我想要的。
我在这里做错什么,如何避免这种情况?
答案 0 :(得分:0)
编辑:
您不能等待构造函数中的promise。您可以做的是:
// Now, this.userSSN is a reference to a Promise.
fetchSSN() {
this.userSSN = firebase.database().ref(`allUsers/${this.currentUser}/SSN`).once('value');
}
然后:
async getLastDocument() {
firebase.database().ref(`allSSN/${(await this.userSSN).val()}/lastDocument`);
}
这样,“ waiter”在方法上,而不在构造函数上。
第一件事:
根据Firebase documentation,.val()
会返回值本身,因此this.userSSN
是基本元素或对象(number
,string
,无论)。
因此,一旦您不需要getLastDocument
时,async
就不必await
。
如果getLastDocument
拥有this.userSSN = undefined
,则意味着您没有事先调用fetchSSN
或,我认为您的情况是,这些方法在{{1 }},您可能会在两个不同的service
中定义它们,使它们成为两个不同的实例,那么您就不会调用相同的modules
。