2017-01-31 6 views
0

хороший вечер ребятаangular2 HTTP Resolve Promise

Я пытаюсь попасть в 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

Спасибо за ваш ответ Гюнтер. Я собираюсь попробовать это завтра наверняка. Но мне интересно, почему фрагмент, который я опубликовал, работает для каждого другого 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

Спасибо большое за ваш собеседник. Наверное, мне нужно разобраться в этих двух методах, прежде чем продолжить. – devphil0

+0

Несомненно, проблем нет. –

Смежные вопросы