gpt4 book ai didi

angular - 将 observable 转换为 Promise 好吗?

转载 作者:行者123 更新时间:2023-12-04 23:25:51 26 4
gpt4 key购买 nike

我遇到了问题并解决了它,但希望收到几个问题的答案。我需要使用 Angular HttpClient 通过 post 方法发送一些数据。在一开始的时候我已经以这种方式实现了请求:

this.http.post<{name: string}>('some/url/address', {name}, httpOptions).subscribe((response) => {
console.log('the request was sucessfull' + response.name);
});

但我注意到,当我删除订阅时,请求根本不会启动。我结束了将可观察到的 promise 转换为这样的:

this.http.post<{name: string}>('some/url/address', {name}, httpOptions).toPromise();

并且它工作正常。我的问题是:

  1. 有更好的方法吗?
  2. 该解决方案会产生什么负面影响?
  3. 有没有办法让它保持可观察状态,但请求在没有订阅的情况下启动?
  4. 出现这种行为的原因是什么?性能调整?

提前感谢您的回答。

最佳答案

1.) 我认为你的第一种方式对于订阅来说没问题。

2.) Promise 解决方案的负面影响是我们放弃了丰富的 RxJS 库的功能并进入了 Promise 领域。我们无法利用 map、switchMap、mergeMap、catchError、withLatestFrom 以及 RxJS 提供的一堆其他不同的运算符。 Promise 路线的另一个负面影响是,一旦 Promise 被“给予飞行”,它就必须以成功或错误的方式返回。对于可观察对象,即使我们订阅它并将其发送到“飞行”,我们也可以使用 I believe 在飞行途中(在订阅回调开始之前)取消它(从而根本不进行 API 调用) takeUntil 并且不会进行 API 调用。

3.) 这是不可能的,必须订阅流才能发出/“起飞”。

4.) 是的,你是对的。与 2 有点联系,您可以通过重试、catchError、takeUntil 和取消订阅来获得更丰富的体验。

关于angular - 将 observable 转换为 Promise 好吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60343082/

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