angular - 如果数据可用,则返回承诺?Firebase-Angular
问题描述
我需要知道这个数据条目是否可用。所以我需要处理返回布尔值的承诺。我尝试了各种方法,但没有奏效。我使用下面的代码来完成任务,我需要将 Promise 作为布尔值返回。
//constants for the database data lists
readonly USER_CHILD_ROOT: string = "user";
list: AngularFireList<any>;
private newUser: DatabaseUser = {
uid: "",
email: "",
name: "",
address01: "",
address02: "",
address03: "",
telephone: "",
}
fileList: any[];
constructor(@Inject(AngularFireDatabase) private firebase: AngularFireDatabase) { }
isUserAvailable(userEmail: string): boolean {
var output: boolean = false;
this.firebase.list(this.USER_CHILD_ROOT)
.snapshotChanges()
.subscribe(
list => {
this.fileList = list.map(item => { return item.payload.key; });
this.fileList.forEach(element => {
if (element === userEmail)
output = true;
//console.log(element);
});
});
return output;
}
解决方案
它需要是 Promise 还是只是一个异步进程的结果,该进程被分配给如下所示的某个变量。
// Add a new variable
userAvailable: Boolean = false;
// Fetch the status of that user and update the component property
isUserAvailable(userEmail: string): void {
this.firebase.list(this.USER_CHILD_ROOT)
.snapshotChanges()
.subscribe(list => {
this.userAvailable = list
.map(item => item.payload.key)
.some(element => element === userEmail)
});
}
您只需要在某处调用上述方法即可根据过程结果设置值。
如果您真的希望它成为一个承诺,那么您可以通过使用.toPromise()
而不是订阅 Observable来更改它
async isUserAvailable(userEmail: string): Promise<boolean> {
return this.firebase.list(this.USER_CHILD_ROOT)
.snapshotChanges()
.pipe(
map(list => {
return list
.map(item => item.payload.key)
.some(element => element === userEmail)
});
).toPromise()
}
推荐阅读
- python - 如何在类似于表格单元格的段落中添加文本
- php - Laravel - 不从站点发送消息
- java - 尝试使用 java 将数据插入 PostgresSQL 表时,序列应用程序的权限被拒绝
- sql - 返回每个组具有最大值的行
- javascript - 在 JS 中格式化两个单独的字符串日期
- flutter - 来自提供者的空值,在颤振中热重载后返回数据
- sql-server - 多日期范围查询
- python - 尝试使用 copytree 在 Python 中递归地复制子文件夹
- reactjs - 边缘和 ie11 上的 Nextjs 'endsWith' polyfill 问题
- python - 如何向 Django 返回渲染调用添加多个字典列表?