我创建了以下函数,以便从firebase表中获取数据,包括记录的键:
fetchUsers() {
this.firebase.list('users').snapshotChanges()
.subscribe(res => {
this.userList = [];
res.forEach(element => {
var user = element.payload.toJSON();
user["$key"] = element.key;
this.userList.push(user as User);
});
});
}
如何在调用函数时返回userList数组?
您可以返回一个数组的可观察对象,然后订阅它。
fetchUsers(): Observable<User[]> {
return this.firebase.list('users').snapshotChanges()
.pipe(
map(res => {
return res.map(element => {
let user = element.payload.toJSON();
user["$key"] = element.key;
return user as User;
});
}));
}
然后你可以从你调用它的地方订阅这个方法。
this.usersSubscription = this.dataService.fetchUsers.subscribe(users=> {
this.users = users;
});
记得在onDestroy中取消订阅。
ngOnDestroy() {
this.usersSubscription.unsubscribe();
}
结帐这个工作stackblitz
不要subscribe
而是map
到你想要返回的值,这将从Observable
返回fetchUsers
,然后你可以通过this.fetchUsers.subscribe((...) => ...)
订阅:
fetchUsers() {
return this.firebase.list('users').snapshotChanges()
.pipe(map((res) => {
this.userList = [];
res.forEach(element => {
var user = element.payload.toJSON();
user["$key"] = element.key;
this.userList.push(user as User);
return this.userList;
});
}));
}