讓我們打破運營明白這是怎麼回事...
fetchById(id: number): Observable<Document> {
const documents: Observable<Document[]> = this.store.select(s => s.documents);
const filtered: Observable<Document[]> = documents.filter((obj: Document[]) => obj.id == id);
const result: Observable<Document> = filtered.first();
return result;
}
注意Observable#filter()
的回調需要一個數組,而不是單個項目。這與Array#filter()
和錯誤消息的原因不同。此外,請參閱我無法從[0]
檢索第一個可觀察項的項目,請使用first()
代替。然後我改變返回類型來返回一個可觀察值。
但是,它不起作用。當我們考慮從可觀察數據過濾數組時,可能我們想使用Observable#map()
來生成另一個具有單個元素的數組。
fetchById(id: number): Observable<Document> {
return this.store
.select(s => s.documents)
.map(list => obj.find(obj => obj.id === id));
.first();
}
如果我們想返回觀察到的最後一個值,我們可以這樣做:
fetchById(id: number): Document | null {
let result: Document | null = null;
this.store
.select(s => s.documents)
.map(list => obj.find(obj => obj.id === id) || null);
.first()
.subscribe(item => result = item);
return result;
}
我| null
鍵入它因爲具有指定id
文件可能不存在。