从Angularfire2撤回价值

时间:2017-12-28 21:54:44

标签: angular angularfire2 google-cloud-firestore angular2-observables

我对此感到疯狂,所以我向观众提交。

我需要返回一个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()

2 个答案:

答案 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());

很抱歉,如果它没有回答你的问题,我想知道自己的问题在这里!