2017-08-26 48 views
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); 
    } 


} 

我知道我的问题是长期和混乱。我将不胜感激任何帮助。

回答

1

您需要在两个组件的生命周期钩子OnDestroy中取消订阅。

+0

否来自节点服务器的有效负载仍将传递到现在订阅到服务层的组件。我试过这个,它不会工作。无论如何,我已经将其留在了代码库中。 – user1893410

+0

当然,我会看看我明天是否可以重新制作。与此同时,您使用的是什么版本的Angular?您是否使用angular-cli创建项目,如果不是,那么您使用的是什么? – dockleryxk

+0

我正在使用角2.4.10。我也使用angular-cli 1.3.0。我认为我需要做的是按照您的建议使用onDestroy方法,并使用像bluebird这样的框架向节点服务器发送某种取消请求,以便它不会将有效内容发送到从此服务观察的下一个组件。无论是那个还是我都需要打破抽象,只需使用两个不同组件在服务层中调用的不同方法名称即可。 (我讨厌这样做) – user1893410