this.groupChatsSub = CEChats.find({
group: {$in: groupIds}
})
.mergeMap(list => Observable.from(list))
.flatMap((chat: any)=> {
return this.findLastChatMessage(chat._id, chat.lastMessage).map(lmsgsub=> {
console.log('lmsgsub', lmsgsub)
if(lmsgsub) {
chat.lastMessage = lmsgsub;
chat.unseen = !lmsgsub.seenBy.some((x)=>x==this.user._id);
if(chat.unseen) {
this.groupChatUnseen++;
}
} else {
chat.unseen = false;
}
return chat;
})
})
// .map((sub)=> {
// console.log(sub);
// return sub;
// })
.mergeAll();
Ich versuche, meine beobachtbare Pipe korrekt funktionieren zu lassen.Observable wieder in ein Array einbinden
Die Suche gibt einen Array aus meiner Datenbank
ich das Array in eine beobachtbaren Array machen mergeMap so dass ich jedes der Objekte in dem Array im nächsten Schritt zugreifen kann.
Ich dann flatMap, um jedes der Array-Elemente zu verarbeiten, die übergeben werden, die eine andere Funktion, die eine Observable zurückgibt, wenn das und ich tun, was ich tun muss, um das einzelne Objekt.
Die auskommentierte Karte druckt alle einzelnen Objekte korrekt, wie ich es erwarte.
Ich versuche dann, alle einzelnen Objekte wieder in ein Array zu verschmelzen (das scheint nicht zu funktionieren).
Wie bekomme ich alle Objekte zurück in ein Array? Und schreibe ich andere Arten von Karten anstelle der FlatMap? (ConcatMap und mergeMap scheinen beide genau das Gleiche zu tun, wenn ich es anstelle des flatMap hinzufügen)
~ bearbeiten
Nach dem Picci Antwort mit unter ich es so weit geändert, die recht gut zu sein scheint zu funktionieren.
this.groupChatsSub = CEChats.find({
group: {$in: groupIds}
})
.mergeMap(listChats => {
console.log('listy chats', listChats)
let myArrayOfChats = [];
let myArrayOfObservables = new Array<any>();
for (let chat of listChats) {
console.log('IN TEH FOR EACH');
myArrayOfChats.push(chat);
myArrayOfObservables.push(
this.findLastChatMessage(chat._id, chat.lastMessage).map(lmsgsub=> {
console.log('lmsgsub', lmsgsub)
if(lmsgsub) {
chat.lastMessage = lmsgsub;
chat.unseen = !lmsgsub.seenBy.some((x)=>x==this.user._id);
if(chat.unseen) {
this.groupChatUnseen++;
}
} else {
chat.unseen = false;
}
});
);
};
return Observable.combineLatest(myArrayOfObservables).map(()=> myArrayOfChats);
})
Danke, ich musste einige Änderungen daran vornehmen, wie Sie in Ihrem Disclaimer gesagt hatten, aber es hat mich definitiv auf den richtigen Weg gebracht. danke nochmal: D speziell für den Tipp über FlatMap und MergeMap –