【发布时间】:2017-08-02 23:22:44
【问题描述】:
我在处理一些 observables 时遇到了麻烦。我好像拿不到两个 observables 很好地放在一起。他们自己工作就好了,但我 需要这两个值。
db.glass.subscribe( ( glass: GlassData[] ): void => {
console.log( glass ); // This prints
});
db.cassette_designs.subscribe( ( cassettes: CassetteData[] ): void => {
console.log( cassettes ): // This prints
});
对 observables 不太熟悉,我尝试的第一件事是 将一个嵌套在另一个内部,但内部的似乎没有做任何事情。
db.glass.subscribe( ( glass: GlassData[] ): void => {
console.log( glass ); // This prints
db.cassette_designs.subscribe( ( cassettes: CassetteData[] ): void => {
console.log( cassettes ): // This doesn't
});
});
这似乎有点傻,所以我在谷歌上搜索,看看是否有
结合 observables 的更好方法,事实证明有一些。我试过了
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
});
observables 是通过以下方式创建的:
...
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 ) );
});
}
...
然后,为了真正获得 observable,我发送了一个监听相关事件的响应。例如
...
public cassette_designs: Observable<CassetteData[]>;
...
this.cassette_designs = _socket.Listen( "get_cassette_designs" )
.map( ( res: Response ) => res.data.data );
【问题讨论】:
-
很好奇你的项目是什么!磁带和玻璃,他们都在一起玩!喜欢它!
-
这是一个允许用户设计门的在线工具。
标签: typescript angular rxjs