gpt4 book ai didi

promise - 为什么我们不需要在将它转换为 Promise 之前订阅一个 observable?

转载 作者:行者123 更新时间:2023-12-04 02:03:45 25 4
gpt4 key购买 nike

我的服务类包含如下代码:

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

}

我已经得到了所需的结果,但是为了理解 Observable 和 Observer 的概念,我的 Observable 应该有一个 Observer 来订阅。那么为什么不应该使用代码 const data = await this.service.getGoogle .subscribe().toPromise() 在这里不起作用并显示错误,即 property toPromise() does not exists on type Subscription。

我看到了toPromise()的官方资源我发现它与 .just().toPromise() 一起使用。然后我发现 .just() API 指出

The just() method emits its parameter(s) as OnNext notifications, and after that, it emits an OnCompleted notification.

所以它在这里使用了订阅的功能,那么为什么它不与 .subscribe() 一起使用呢?

最佳答案

要从可观察对象中获取值,您将在可观察对象上subscribe()。这会启动 observable,它会向您发送它产生的值。

如果您更愿意使用 Promise,您可以在可观察对象上调用 toPromise()。这将使 observable 表现得像一个常规的 promise。

在幕后,toPromise() 在 observable 上调用 subscribe() 并等待它发送 complete()。当接收到 complete() 信号时,promise 将解析最后发出的 next() 信号。

toPromise() 看起来有点像这样:

myObservable.takeLast().subscribe(value => resolve(value));

关于promise - 为什么我们不需要在将它转换为 Promise 之前订阅一个 observable?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45274114/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com