我無法獲得一些觀察對象。我似乎無法得到兩個 observables放置在一起。他們自己的工作很好,但我 需要兩個值。Angular2合併觀察對象
db.glass.subscribe((glass: GlassData[]): void => {
console.log(glass); // This prints
});
db.cassette_designs.subscribe((cassettes: CassetteData[]): void => {
console.log(cassettes): // This prints
});
由於不是所有熟悉的觀測,我想的第一件事是 嵌套在另一個內,但內一個似乎並沒有做任何事情。
db.glass.subscribe((glass: GlassData[]): void => {
console.log(glass); // This prints
db.cassette_designs.subscribe((cassettes: CassetteData[]): void => {
console.log(cassettes): // This doesn't
});
});
這似乎有點傻成這樣我搜索在谷歌,看看是否有一個 更好的方法來觀測結合起來,原來有幾個。我試過 zip
和forkJoin
,因爲他們看起來最喜歡我想做的事情,但是 也沒有什麼能與他們一起工作。
Observable.zip(db.cassette_designs, db.glass, (cassettes: CassetteData[], glass: GlassData[]): void => {
console.log(cassettes); // doesn't print
console.log(glass ); // doesn't print
});
Observable.forkJoin([ db.cassette_designs, db.glass ]).subscribe((data: any): void => {
console.log(data); // doesn't print
});
這可能是這樣簡單的事情,因爲我沒有正確調用功能,但 我還以爲我會得到某種形式的警告或錯誤的在某些時候。 tsc
沒有任何代碼問題,我在Chrome或Firefox上的開發人員 控制檯中沒有收到任何消息。
更新
我試過combineLatest
,但它仍然不會顯示在控制檯東西。我一定錯過了一些東西,但我不確定是什麼。他們單獨工作。
Observable.combineLatest(db.cassette_designs, db.glass, (cassettes: CassetteData[], glass: GlassData[]): void => {
console.log(cassettes); // doesn't print
console.log(glass ); // deson't print
});
的觀測是創建方式如下:
...
public Listen(event: string): Observable<Response>
{
return new Observable<Response>((subscriber: Subscriber<Response>): Subscription => {
const listen_func = (res: Response): void => subscriber.next(res);
this._socket.on(event, listen_func);
return new Subscription((): void =>
this._socket.removeListener(event, listen_func));
});
}
...
然後真正得到我派人對有關事件響應的監聽觀測。例如
...
public cassette_designs: Observable<CassetteData[]>;
...
this.cassette_designs = _socket.Listen("get_cassette_designs")
.map((res: Response) => res.data.data);
SO好奇你的項目是什麼!卡帶和玻璃,他們都在一起玩!愛它! –
這是一個允許用戶設計門的在線工具。 – Hector