2017-01-31 28 views
0

晚上好,小伙子们angular2 HTTP决心承诺

我试图进入angular2并得到了让我从正在进行的一个问题。

服务:

getProject(id: number): any { 
    var url = this.ProjectsUrl + '/'+ id; 
    return this.http.get(url) 
     .toPromise() 
     .then(response => { 
     console.log(response.json().data as Project); 
     }) 
     .catch(this.handleError); 
    } 

组件:

getProject(id:number){ 
     this.projectService 
     .getProject(id) 
     .then(project => this.project = project); 
    } 

ngOnInit()

ngOnInit() { 
    this.sub = this.route.params.subscribe(params => { 
     this.getCustomers(); 
     console.log('b4 getProj') 
     this.getProject(+params["id"]); 
     console.log('after getProj') 
    }); 
    } 

输出:

b4 getProj 
after getProj 
Object { Project } 

我不知道为什么诺言不会得到解决?有小费吗?

+0

为什么你觉得有什么不得到解决? –

回答

0

我想这是你想要什么:

getProject(id:number){ 
    return this.projectService // <<<=== added return 
     .getProject(id) 
     .then(project => this.project = project); 
    } 

    ngOnInit() { 
    this.sub = this.route.params.subscribe(params => { 
     this.getCustomers(); 
     console.log('b4 getProj') 
     this.getProject(+params["id"]) 
     .then(_ => console.log('after getProj')); // <<<=== changed 
    }); 
    } 
+0

感谢您的回答Günter。我明天会试一试。但我想知道为什么我发布的代码片段适用于所有其他http请求,但是这个?! – devphil0

+0

这只是一个猜测。我无法从你的问题中找出问题所在。 –

1

一个与Angular2好处是它的可观支持到位承诺。

以防万一,如果你想在地方的承诺,然后在下面的代码中使用的观测量,可以用:

服务:

getProject(id: number): any { 
    var url = this.ProjectsUrl + '/'+ id; 
    return this.http.get(url) 
     .map(response => { 
     response.json().data as Project; 
     }) 
     .catch(this.handleError); 
    } 

组件:

getProject(id:number){ 
      this.projectService 
      .getProject(id) 
      .subscribe(project => { 
      this.project = project 
      }); 
     } 

我希望这有助于。

只要记住你的服务添加如下声明:

import { Observable } from 'rxjs'; 
+0

非常感谢你的anwser。我想在继续之前我需要弄清这两种方法的区别。 – devphil0

+0

当然,没问题。 –