如何使用rxjs返回结果列表

时间:2017-08-17 13:39:21

标签: javascript firebase firebase-authentication rxjs ionic3

我正在使用Ionic 3,Firebase和FirebaseAuth。我尝试使用当前经过身份验证的用户来检索此用户的对象列表。以下是我的尝试,我收到了错误

  

getContacts错误:TypeError:您提供了' undefined'预期流的地方。您可以提供Observable,Promise,Array或Iterable。

我在这里遗漏了一些内容,因为它似乎应该用每个新数据更新self.assertTrue(any(animal in method("cat dog tiger") for animal in ("cat", "dog")))

我的尝试:

onNext

非常感谢任何帮助。

解决方案根据forkJoin建议:

getContacts() {
    this.contactList.length = 0;
    this.data.getAuthenticatedUserContactList().subscribe(
      (contact => {
        this.contactList.push(contact);
      }),
      (error => console.error(`getContacts Error: ${error}`))
    );
  }

getAuthenticatedUserContactList() {
    return this.afAuth.getAuthUser()
      .flatMap(user => this.database.list(`contact-lists/${user.uid}`).take(1))
      .flatMap((contactList) => {
        if (contactList && contactList.length > 0) {                
          contactList.forEach(element => {
            console.log(`ForEach: ${element.userId}`); // THIS LOGS THE IDS AS EXPECTED 
            return this.database.object(`/profiles/${uid}`, { preserveSnapshot: true }).take(1);
          });
        } else {
          return Observable.throw(new Error("No bros here"));
        }
      });
  }

1 个答案:

答案 0 :(得分:1)

在第二个$scope运算符中,如果满足此条件,则不返回任何内容:

flatMap()

contactList && contactList.length > 0 语句位于return回调中。

我不知道你的应用程序的逻辑是什么,但回调forEach始终需要返回一个Observable(或此处列出的内容:http://reactivex.io/rxjs/class/es6/MiscJSDoc.js~ObservableInputDoc.html