我无法获得一些观察对象。我似乎无法得到两个 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