将可观察数据存储到全局变量中会在Angular 4中返回“undefined”

时间:2017-11-29 07:41:59

标签: node.js angular

我目前正在使用我设置的节点服务器并创建了一个/user-info

的端点res.send({id: <my-id>, name: <my-display-name>})

On Angular我创建了一个global.service.ts文件,它将使用http.get调用此端点并订阅该数据并存储到我声明的两个变量中。

import { Injectable } from '@angular/core';
import { HttpClient } from '@angular/common/http';

@Injectable()
export class Globals {

    constructor(private http: HttpClient) { }

    public id: string;
    public name: string;

    userInfo() {
        this.http.get('/user-info').subscribe(
            (data: any) => {
                this.id = data.id;                    
            }
        );
        console.log(this.id);
    }

}

一旦我console.log(this.id),它就会返回undefined。我已经在服务器端查看是否导致问题,但它返回一个字符串。

在我的server.js文件(节点服务器)中,我正在使用express。这是终点:

app.get('/user-info', function(req, res) {
    client.get('id', (err, data) => {
        client.get('name', (err, reply) => {
            res.send({id: data, name: reply})
        })
    })
})

我使用redis存储值'id''name'client.get只是用于从缓存中调用这些值的redis命令。我测试过只检查localhost:8000/user-info,一切都很好。

我是否遗漏/误解了什么?谢谢!

1 个答案:

答案 0 :(得分:1)

如果console.log仍在调用之外,它将在您收到响应之前执行。试试这个:

      RM  LSTAT  PTRATIO      MEDV
0  6.575   4.98     15.3  504000.0
1  6.421   9.14     17.8  453600.0
2  7.185   4.03     17.8  728700.0
3  6.998   2.94     18.7  701400.0
4  7.147   5.33     18.7  760200.0