【问题标题】:node/angular2 services returning values to wrong componentnode/angular2 服务将值返回到错误的组件
【发布时间】:2017-08-26 15:43:34
【问题描述】:

我是 nodejs/angular2 的新手。我对节点的异步行为及其返回角度服务有一个奇怪的问题。我遇到的问题是两个不同的角度组件,说组件 A 和组件 B 在其中注入了相同的角度服务。

服务器端是一个异步节点服务器,它需要一些时间来完成请求。问题是当应用程序从角度组件 A 路由到角度组件 B 时,有时对节点的请求是从组件 A 完成的,但由于我们目前路由到组件 B 响应去那里。 (组件 A 和 B 不能同时显示。一次只能看到一个)

因为组件 B 也订阅了相同的服务/方法,所以它会得到为组件 A 指定的返回结果。导致不正确的值。

组件 B 有没有办法只接收对其发出的请求的响应。

这两个组件都订阅了服务中的相同方法,因此:

这里的代码太大了,所以我要做sn-ps。

这是每个组件中的代码。

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);
  }


 }

我知道我的问题很长而且令人困惑。我将不胜感激。

【问题讨论】:

    标签: node.js angular2-services


    【解决方案1】:

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

    【讨论】:

    • 没有来自节点服务器的有效负载仍将传递到现在订阅服务层的组件。我试过这个,它不会工作。不管怎样,我都把它留在了代码库中。
    • Dang,我明天看看能不能重新创建这个。同时,您使用的是哪个版本的 Angular?您是否使用 angular-cli 创建了项目,如果没有,那么您使用的是什么?
    • 我使用的是 Angular 2.4.10。我也在使用 angular-cli 1.3.0。我想我需要做的是按照您的建议使用 onDestroy 方法,并使用像 bluebird 这样的框架向节点服务器发送某种取消请求,这样它就不会将有效负载发送到从该服务观察的下一个组件.要么,要么我需要打破抽象,只使用由两个不同组件在服务层调用的不同方法名称。 (我不想这样做)
    • 您没有使用 Angular 4 是否有特殊原因?
    • 我在一个不是我创建的代码库中工作,而是为我工作的公司工作。他们选择了堆栈。 angular 4有办法取消请求吗?
    猜你喜欢
    • 2017-04-17
    • 2016-11-28
    • 1970-01-01
    • 2017-03-07
    • 2019-07-12
    • 2021-06-07
    • 1970-01-01
    • 2016-05-09
    • 1970-01-01
    相关资源
    最近更新 更多