我正在尝试检查用户的isActive
属性是否设置为false
。如果是,那么我需要注销用户。我知道这不是实现此目标的最佳方法,但可以稍后进行更改。我正在执行以下操作,但是它说this
是未定义的。如何从.then
signOut() {
this.afAuth.auth.signOut()
.then(() => {
this.router.navigate(['/']);
});
}
checkIfActive(id: string) {
return this.afs.collection("users").doc(id).ref.get()
.then(function(doc) {
if (doc.exists) {
if (doc.data().isActive === false) {
this.signOut(); // <------ says 'this' is undefined
}
} else {
console.log("No such document!");
}
})
.catch(function(error) {
console.log("Error getting document:", error);
});
}
答案 0 :(得分:2)
如果您要从signOut
访问thenable
函数,则需要使用Arrow functions
。
使用then(function(doc) {
代替then(doc => {
。这将允许this
访问原始上下文。
箭头函数按词法绑定它们的上下文,因此实际上是指原始上下文
checkIfActive(id: string) {
return this.afs.collection("users").doc(id).ref.get()
.then(doc => {
if (doc.exists) {
if (doc.data().isActive === false) {
this.signOut();
}
} else {
console.log("No such document!");
}
})
.catch(function(error) {
console.log("Error getting document:", error);
});
}
答案 1 :(得分:0)
您不能在“ Funtion(){}”中使用“ this”,因为它不在其范围内。您必须使用“()=> {}”箭头功能。
checkIfActive(id: string) {
return this.afs.collection("users").doc(id).ref.get()
.then((doc) => {
if (doc.exists) {
if (doc.data().isActive === false) {
this.signOut(): <------says 'this' is undefined
}
} else {
console.log("No such document!");
}
}).catch(function(error) {
console.log("Error getting document:", error);
});
}