0
我是nodejs/angular2的新手。我对节点的异步行为以及它返回到角度服务有一个奇怪的问题。我遇到的问题是两个不同的角度组件,说组件A和组件B有相同的角度服务注入它们。node/angular2服务将值返回给错误的组件
服务器端是异步节点服务器,需要一些时间才能完成请求。问题是应用程序从角度组件A到角度组件B的路由,有时节点的请求从组件A完成,但由于我们是目前路由到组件B的响应去那里。 (组件A和B同时不可见,每次只能看到一个)
因为组件B也订购了相同的服务/方法,所以它将得到为组件A指定的返回结果。导致不正确的值。
有没有办法从组件B只接收对它发出的请求的响应。
两者都是组件订阅服务中相同的方法,例如:
的代码的方式来大到放在这里,所以我会怎么做片段。
以下是每个组件中的代码。
getNode(){
this.userService.getNode().subscribe(resNodeData => {
this.node = resNodeData;
if(this.node == null){
return null;
}
else{
// console.log(this.node);
}
});
}
从服务层邮编:
export class UserService {
//call to node server async
getNode() {
return this.http.get("http://" + host + ":3000/api/namenode/" + this.clusterService.getCluster())
.map((res:Response) => res.json())
.catch(this._errorHandler);
}
}
我知道我的问题是长期和混乱。我将不胜感激任何帮助。
否来自节点服务器的有效负载仍将传递到现在订阅到服务层的组件。我试过这个,它不会工作。无论如何,我已经将其留在了代码库中。 – user1893410
当然,我会看看我明天是否可以重新制作。与此同时,您使用的是什么版本的Angular?您是否使用angular-cli创建项目,如果不是,那么您使用的是什么? – dockleryxk
我正在使用角2.4.10。我也使用angular-cli 1.3.0。我认为我需要做的是按照您的建议使用onDestroy方法,并使用像bluebird这样的框架向节点服务器发送某种取消请求,以便它不会将有效内容发送到从此服务观察的下一个组件。无论是那个还是我都需要打破抽象,只需使用两个不同组件在服务层中调用的不同方法名称即可。 (我讨厌这样做) – user1893410