Angular 5:Property&#39;然后&#39;在类型&#39; Observable <any>&#39;上不存在

时间:2018-04-10 04:54:33

标签: angular mean

我收到此错误消息&#34; [ts]属性&#39;然后&#39;类型&#39; Observable&#39;上不存在。&#34;,如何解决?

这是我的组件:

  getUsers(){
    this.authService.getUsers().then((res) => {
      this.user = res;
      console.log(this.user);
    },(err) => {
      console.log(err);
    });
  }

这是我的服务:

 getUsers(){
    let headers = new Headers();
    headers.append('Content-Type', 'application/json');
    return this.http.get('http://192.168.100.6:3000/users/data-tracer', {headers: headers})
    .map(res => res.json());
  }

5 个答案:

答案 0 :(得分:5)

您可以在then对象上致电Promise,因为您的服务会返回Obaservable个对象,您需要转换为Promise toPromise()方法并使用catch方法以这种方式管理错误:

getUsers(){
    this.authService.getUsers()
    .toPromise()
    .then((res) => {
      this.user = res;
      console.log(this.user);
    })
    .catch(err=> { console.log(err) });
  }

在这里,您可以看到DEMO。 就是这样。

答案 1 :(得分:4)

&#34;然后&#34;是一个承诺概念,RxJS有点不同。如果要对多个调用进行排序,则需要使用forkJoin。 如果您只想拥有一个成功处理程序,那么请使用subscribe和catch。

getUsers(){
    this.authService.getUsers().subscribe((res) => {
      this.user = res;
      console.log(this.user);
    }).catch((err) => {
      console.log(err);
    });
  }

确保您理解promise和observable(Angular - Promise vs Observable)之间的区别并做出适当的设计决策。

答案 2 :(得分:1)

我通过使用toPromise()函数来解决此问题:

  getUsers(){
    this.authService.getUsers().toPromise().then((res) => {
      this.user = res;
      console.log(this.user);
    },(err) => {
      console.log(err);
    });
  }

答案 3 :(得分:0)

尝试这样的事情。

import 'rxjs/add/operator/toPromise';
import 'rxjs/add/operator/map';

...

this.yourService.getWhatYouWant()
.map(data => {
  // do some thing
})
.toPromise()
.catch(err => {
  // handle error
});

答案 4 :(得分:-1)

要使用 toPromise()。then(),首先需要获取 Observable对象
我使用此解决方案:

   import { of } from "rxjs";
----------------

 var clienteDocument = this.clienteCollection.doc(nuevocliente.cli_cedula);
    var clienteObservable = clienteDocument.valueChanges(); //Get Observable<Object> from Firebase
    var cliente = of(clienteObservable); //Obtengo el Objeto de Observable
    cliente.toPromise().then((cliente) => {  
      if (cliente == null) {
        //cliente not existe

      } else {
        //cliente exist :)

      }
    });