我可以看到node-express服务器响应,但我不能在我的angular2 promise服务

时间:2016-12-20 17:22:52

标签: node.js angular express typescript es6-promise

enter image description here enter image description here我从服务器响应中返回了我的对象,我可以在google chrome dev工具的网络标签响应中看到。

module.exports = (req, res) => {   
var obj = {
    name: "Thabo",
    age: 23
};
res.json({obj})
};

我有angular2-typescript服务,它使用promise来从服务器获取响应

export class MyService {
  constructor(private http: Http) { }
  getMessage(): Promise<any> {
return this.http.get('/map-moving-agents')
           .toPromise()
           .then((res)=> {
             console.log(res.json().data);
             res.json().data;
            })
           .catch(this.handleError);
}

private handleError(error: any): Promise<any> {
console.error('An error occurred', error); 
return Promise.reject(error.message || error);
}
}

我甚至在响应的'then'上记录了响应,并且记录未定义。

这是使用服务的组件

export class MapMovingAgents implements OnInit{

msg: {};
constructor(private myService: MyService){}

getMessage(): void {
    this.myService.getMessage().then((res) => { this.msg = res;})
     console.log(this.msg);
}

ngOnInit(): void {
    this.getMessage();
}
}

2 个答案:

答案 0 :(得分:1)

您需要返回其余代码的最终值才能使用

  return this.http.get('/map-moving-agents')
       .toPromise()
       .then((res)=> {
         console.log(res.json().data);
         return res.json().data;    <--------------
        })
       .catch(this.handleError);
}

答案 1 :(得分:1)

getMessage(): void {
    this.myService.getMessage().then((res) => { this.msg = res;})
     console.log(this.msg);
}

将记录undefined,因为getMessage()函数是async函数。

将其更改为

getMessage(): void {
    this.myService.getMessage().then((res) => { 
        this.msg = res;
        console.log(this.msg);
    });         
}

并且您的回复没有data字段,因此res.json().data; undefined仅返回res.json()res.json().obj