我收到此错误消息" [ts]属性'然后'类型' Observable'上不存在。",如何解决?
这是我的组件:
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());
}
答案 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)
"然后"是一个承诺概念,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 :)
}
});