我对此感到疯狂,所以我向观众提交。
我需要返回一个Observable。 我首先调用Firestore来检索包含数组的字段,然后根据数组的每个值,我想检索匹配的键。通常很容易。
我确切地知道我在控制台上无法解决的问题,所以数据在这里,但为什么他们从未在视图中显示出来。在我放弃之前,我做了下面的无数变化。
我的服务 - 编辑以反映建议。仍然没有工作
x = f.read()
d = round_trip_load(x)
round_trip_dump(d, f, explicit_start=True)
我的组件
getUserActivites() {
console.log(this.userId)
let array = []
const agenda = this.afs.doc(`users/${this.userId}`).snapshotChanges()
agenda.subscribe(list => {
const data = list.payload.data().activities
data.map(event => {
const id = event
const dataRef = this.afs.doc(`activities/${event}`).valueChanges()
dataRef.subscribe(date => {
array.push(date)
console.log(array) //array log the expected data in an array of Object
return data
})
})
})
return agenda
}
然后在构造函数
public agendaData: Observable<any>
我的观点
this.agendaData = this.agenda.getUserActivites()
答案 0 :(得分:1)
1)我想你忘记了subscribe()
中的this.afs.....snapshotChanges()
。 Promise和Observables之间的区别之一是Observables很懒 - 你需要订阅才能开始工作。
2)如果您不需要密钥/ ID,则应使用更易于使用的valueChanges()
。示例(未测试):
getUserActivites() {
let agenda = [] //Created for logging only
let usersTask = this.afs.object(`users/${this.userId}`).valueChanges();
let myReturnTask = usersTask.subscribe(users => {
console.log('received users');
users.map(user => {
const dataRef = this.afs.doc(`activities/${user.id}`).valueChanges()
dataRef.subscribe(date => {
agenda.push(date) //For logging purpose I created this array
console.log(agenda) //Here I see exactly what I want!
return date // Why date is not returned?
})
})
})
return myReturnTask;
}
答案 1 :(得分:0)
getUserActivities =()=&gt; {work?
日期是可观察的吗?
this.observableBooks = this.bookService.getBooksWithObservable();
getBooksWithObservable():Observable { return this.http.get(this.url).map((res:Response)=&gt; res.json());
很抱歉,如果它没有回答你的问题,我想知道自己的问题在这里!