【发布时间】:2017-11-23 11:50:50
【问题描述】:
订阅 Observable,取不到值。
当前行为
- 我运行一个 nodejs 服务器,命名为 N 。它提供数据。然后,我运行一个名为 A 的 Angular 应用程序。
- A和N建立socket连接。一个行为客户。 N 行为服务器。
- N有一个定时任务向客户端A发送数据
- 在A中,我使用了一个服务来接收数据。可以得到。
- 服务注入一个组件,但无法获取组件中的订阅数据。
预期行为
- 可以在组件中获取订阅数据。
用指令最小化重现问题
-
角度服务:
createObservableSocket(url: string, id: number): Observable<any> { let a = new Observable<string>( observer => { this.ws.onmessage = (event) => { observer.next(event.data); console.log('event data:', event.data); // event data: [{"productId":1,"bid":3616.8217831199527}] } this.ws.onerror = (event) => observer.error(event); this.ws.onopen = (event) => this.sendMessage({productId: id}); this.ws.onclose = (event) => observer.complete(); } ); console.log('a:', a); // [Observable object] let b = a.map(message => { JSON.parse(message); }); console.log('b:', b); // [Observable object] return b;}
sendMessage(message: any) { console.log('client ws service msg:', JSON.stringify(message)); //client ws service msg: {"productId":1} this.ws.send(JSON.stringify(message)); } -
角度分量
watchProduct() { this.isWatched = !this.isWatched; this.wsService.createObservableSocket('ws://localhost:8085', this.product.id) .subscribe( products => { console.log('component received:', products); //component received: undefined let product = products.find( p => p.productId === this.product.id); this.currentBid = product.bid; } ); }
环境
Angular version: 4.2.4
Browser:
- [ ] Chrome (desktop) version 60.0.3112.101
For Tooling issues:
- Node version: v8.1.0
- Platform: Windows 10
其他:
- 为什么不能订阅数据,请帮帮我。谢谢!
【问题讨论】:
-
我相信这与重新分配初始 Observable 有关。请您尝试在没有
.map()的情况下返回a,然后看看您是否会在组件中获取数据。
标签: angular