从Angularfire2返回值

问题描述 投票:2回答:2

我对此感到疯狂,所以我向观众致敬。

我需要返回一个Observable。我首先调用Firestore来检索包含数组的字段,然后根据数组的每个值,我想检索匹配的键。通常很容易。

我确切地知道我在控制台上无法解决的问题,所以数据在这里,但为什么他们从未在视图中显示出来。在我放弃之前,我做了下面的无数变化。

我的服务 - 编辑以反映建议。还是行不通

    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()

我的看法

<div *ngFor="let item of agendaData | async ">
{{ item.name }}
</div>
angular angularfire2 google-cloud-firestore angular2-observables
2个回答
1
投票

1)我想你忘记了subscribe()this.afs.....snapshotChanges()。 Promise和Observables之间的区别之一是Observables很懒 - 你需要订阅才能开始工作。

2)如果你不需要key / 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;
}

0
投票

getUserActivities =()=> {work?

日期是可观察的吗?

this.observableBooks = this.bookService.getBooksWithObservable();

getBooksWithObservable():Observable {return this.http.get(this.url).map((res:Response)=> res.json());

对不起,如果它没有回答你的问题,我想知道自己这里的问题是什么!

© www.soinside.com 2019 - 2024. All rights reserved.