我的服务类包含以下代码:
Service.ts
//all imports are done
@Injectable()
export class Service{
constructor(private http: Http) { }
getGoogle():Observable<any> {
console.log("Inside service");
return this.http.get('https://jsonplaceholder.typicode.com/posts/1');
}
}
我使用服务的页面组件。
Page.ts
//all imports are done
export class Page1{
constructor(private service: Service, private navCtrl: NavController) { }
async get() {
console.log("inside get method");
const data = await this.service.getGoogle().toPromise();
console.log('The response is' , data);
}
}
我已经获得了所需的结果,但是为了理解Observables和Observer的概念,我的Observable应该有一个Observer来订阅。那么为什么代码const data = await this.service.getGoogle.subscribe().toPromise()
不能在这里工作并显示错误property toPromise() does not exists on type Subscription.
我看到toPromise()的官方资源,我发现它与.just().toPromise()
一起使用。然后我找到了.just()
API,其中说明了
just()方法将其参数作为OnNext通知发出,并且 之后,它会发出OnCompleted通知。
所以它在这里使用了subscribe的功能,为什么它不与.subscribe()
一起使用?
答案 0 :(得分:2)
要从可观察量中获取值,您将subscribe()
放在可观察量上。这将启动observable,它将向您发送它产生的值。
如果您想使用Promise
,可以在observable上调用toPromise()
。这将使可观察的行为像常规的承诺。
在幕后,toPromise()
在观察点上调用subscribe()
,并等待它发送complete()
。收到complete()
信号后,承诺将解析最后发出的next()
信号。
toPromise()
看起来有点像这样:
myObservable.takeLast().subscribe(value => resolve(value));