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();
私は観測可能なパイプを正しく動作させようとしています。観測可能な配列を配列に戻す
検索は
私は次のステップで、配列内のオブジェクトの各アクセスできるように観察配列に配列を作るためにmergeMap私のデータベースからの配列を返します。
私は渡される配列項目のそれぞれを処理するためにflatMapを実行します。これは、observableを返す別の関数を呼び出し、それが単一のオブジェクトに対して行う必要があるときに実行します。
コメントアウトされたマップは、期待どおりにすべての単一のオブジェクトを正しく印刷します。
次に、すべてのオブジェクトを1つの配列に再度マージしようとします(これはうまくいかないようです)。
どのようにオブジェクトをすべてアレイに戻すことができますか? そして、私はflatMapの代わりに他のタイプのマップを使用していますか?私は非常によく動作しているようだどの本にそれを変更し、下からPicciの答えを使用した後、編集
〜
(concatMapとmergeMapの両方が、私が代わりにflatMapのそれを追加まったく同じことを行うように見えます)。
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);
})
あなたの免責条項で述べたとおり、いくつかの変更を加えなければなりませんでしたが、間違いなく正しいパスで私を得ました。 もう一度ありがとう:特にflatMapとmergeMapに関するヒント –