Палец вверх 0
Перевод
Перевод

Свойство Angular 2 подписки не существует для типа Promise <любой>

Я импортировал 'rxjs / add / operator / toPromise';

В моем файле Ts у меня есть что-то вроде:

onChange(categoryid) {
//console.log('testing')
this.productService.getProductsOncategory(categoryid).subscribe(data => {
  if (data.success) {

    console.log('Products obtained');
  } else {
    console.log('Not obtained!');
  }
 });
}

Я получаю ошибку:

Свойство «подписаться» не существует для типа «Обещание».

getProductsOncategory(category_id) {

let catUrl = "API URL"
let headers = new Headers();
headers.append('Content-Type', 'application/json');
let catIdObj = JSON.stringify({ category_id: category_id })
return this.http.post(catUrl, catIdObj, { headers: headers })
  .toPromise()
  .then((response: Response) => response.json().data)
  //.map((response: Response) => response.json())
  //.do(data => console.log(JSON.stringify(data)))
  .catch(this.handleError);

}

Как мне изменить фрагмент, если я должен использовать 'then (data =>' ...

javascript angular
задан phyme 20 июл. 2017 г., 12:21:06
источник

2 ответа

Решение 0
Перевод
Перевод

просто сопоставьте запрос http и верните его. не нужно создавать новое обещание

getProductsOncategory(category_id) {

    let catUrl = "API URL"
    let headers = new Headers();
    headers.append('Content-Type', 'application/json');
    let catIdObj = JSON.stringify({
        category_id: category_id
    })

    return this.http.post(catUrl, catIdObj, {
            headers: headers
        })
        .map((res: Response) => res.json());
}
ответ дан Sachila Ranawaka 20 июл. 2017 г., 12:24:48
источник
Палец вверх 2
Перевод
Перевод

Метод подписки для Observable, так что вы можете просто вернуть Observable Object. тогда делай то, что хочешь делать вот так

getProductsOncategory(category_id): Observable<Response>{

        let catUrl = "API URL"
        let headers = new Headers();
        headers.append('Content-Type', 'application/json');
        let catIdObj = JSON.stringify({ category_id: category_id })
        return this.http.post(catUrl, catIdObj, { headers: headers })
  }

this.productService.getProductsOncategory(categoryid)
    .map(response => response.json().data)
    .subscribe(data => doSomething(data),err => catchErr(err));
ответ дан linhao 20 июл. 2017 г., 12:31:39
источник