私はIonic 3、Firebase、FirebaseAuthを使用しています。現在認証されているユーザーを使用して、このユーザーのオブジェクトの一覧を取得しようとしています。以下は私の試みであり、私はそれがデータの各新しい作品でonNext
を更新する必要がありますように、これは思えるように私はここで何かが欠けてるエラーrxjsで結果リストを返すには
getContacts Error: TypeError: You provided 'undefined' where a stream was expected. You can provide an Observable, Promise, Array, or Iterable.
を取得しています。
私の試み:
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"));
}
});
}
任意の助けいただければ幸いです。 forkJoin勧告どおり
策:この条件が真であるとき、あなたは何を返していない第二flatMap()
オペレータで
getContacts() {
this.contactList.length = 0;
this.data.getAuthenticatedUserContactList().subscribe(
(contact => {
contact.map(userContact => {
this.contactList.push(<UserProfile>(userContact));
});
}),
(error => console.error(`getContacts Error: ${error}`))
);
}
getAuthenticatedUserContactList() {
return this.afAuth.getAuthUser()
.mergeMap(user => this.database.list(`contact-lists/${user.uid}`).take(1))
.mergeMap((contactList) => {
return Observable.forkJoin(contactList.map(element => this.getProfileWithUid(element.userId).map(userProfile => userProfile.val())))
});
}
getProfileWithUid(uid: string) {
this.profileObject = this.database.object(`/profiles/${uid}`, { preserveSnapshot: true });
return this.profileObject.take(1);
}
まあ、私は「(1)を取る」と思っ返します観察可能:輸出宣言機能はとなります(これは:Observable 、count:number):Observable ; –
AnxGotta
@AnxGotta Observableを返しますが、それは問題ではありません。私は第2の 'flatMap'について話しています – martin
私は理解しません。返されたリストに項目がないか、またはnullの場合、Observable.throw( "")から 'ErrorObservable'を返します。リストに項目がある場合は、各項目についてObservableを返します。 – AnxGotta