【问题标题】:Angular 2 Property subscribe does not exist on type Promise <any>Promise <any> 类型不存在 Angular 2 属性订阅
【发布时间】:2017-12-25 21:42:57
【问题描述】:

我已经导入了 '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!');
  }
 });
}

我得到错误:

“Promise”类型上不存在“订阅”属性。

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 => '...

,我该如何更改 sn-p

【问题讨论】:

    标签: javascript angular


    【解决方案1】:

    subscribe 方法适用于“Observable”,因此您可以只返回一个 Observable 对象。 然后像这样做你想做的事

    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));
    

    【讨论】:

      【解决方案2】:

      只需映射 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());
      }
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2018-02-01
        • 1970-01-01
        • 2018-10-25
        • 2019-07-08
        • 1970-01-01
        • 1970-01-01
        • 2019-01-03
        • 1970-01-01
        相关资源
        最近更新 更多