Asynchronous Angular2随订阅返回真/假
我需要检查数据库中是否存在用户,如果存在,则返回true。我有一个函数(顺便说一下,我正在使用firebase):Asynchronous Angular2随订阅返回真/假,asynchronous,angular,angularfire2,Asynchronous,Angular,Angularfire2,我需要检查数据库中是否存在用户,如果存在,则返回true。我有一个函数(顺便说一下,我正在使用firebase): 问题是函数总是返回false。它不等待检查订阅。有什么方法可以修复它吗?您可以返回一个承诺,然后调用find(): 您可以使用本机承诺API返回承诺: checkIfUserExists(login: string): boolean { return new Promise(function(resolve, reject) { this.af.database.li
问题是函数总是返回false。它不等待检查订阅。有什么方法可以修复它吗?您可以返回一个承诺,然后调用
find()
:
您可以使用本机承诺API返回承诺:
checkIfUserExists(login: string): boolean {
return new Promise(function(resolve, reject) {
this.af.database.list('/users', {
query: {
orderByChild: 'login',
equalTo: login
}
}).subscribe(response => {
if(response.length === 0 ) {
reject();
} else {
resolve()
}
})
});
}
然后用它作为
checkIfUserExists('login').then(function(response) {
// found
}, function() {
// not found
});
您可以返回可观察对象本身:
checkIfUserExists(login: string): Observable<boolean> {
return this.af.database.list('/users', {
query: {
orderByChild: 'login',
equalTo: login
}
}).map(response => {
if(response.length === 0 ) {
return true;
} else {
return false;
}
});
}
这是因为您的处理是异步的,所以您需要使用回调处理处理。这样,当执行异步处理时,您将确保执行处理
您可以在此类用例中使用Observable(与我的示例中类似的rxjs)或Promise。您的“返回false”不在。subscribe块
属性“toPromise”在类型“Subscription”上不存在。
属性“subscribe”在类型“boolean”上不存在。将返回类型修复为Observable
。还缺少返回
。
checkIfUserExists('login').then(function(response) {
// found
}, function() {
// not found
});
checkIfUserExists(login: string): Observable<boolean> {
return this.af.database.list('/users', {
query: {
orderByChild: 'login',
equalTo: login
}
}).map(response => {
if(response.length === 0 ) {
return true;
} else {
return false;
}
});
}
checkIfUserExists('some username')
.subscribe(userExists => {
// Do something
});