angular - share() 在 Angular HTTP 调用中不起作用
问题描述
我刚刚注意到我的 HTTP 调用不再在组件之间共享。我不确定从哪个版本开始。
已经检查了这个解决方案: Angular2 observable share is not working
这使问题变得更糟(更多的 HTTP 调用),我必须承认我一直很难理解 rxjs。
这是我的服务功能:
getSomeData(): Promise < any >
{
if(this.data) // should keep service from doing extra http for the same request
{
return Promise.resolve(this.data);
}
else
{
return this.http.post(this.createURL('getData',{}),JSON.stringify({}), this.createGetOptions())
.timeout(environment.timeout)
.share()
.map((response: Response) => {
return response;
}).toPromise();
}
}
我从不同的组件中调用它
this.service.getSomeData().then((data: any) =>
{
if (data) {
...
createGetOptions
只需添加标题'Content-Type': 'text/plain; charset=UTF-8'
解决方案
您需要pipe
在 Angular 6+ 中按如下方式使用运算符而不是链接:
例子 -
getSomeData(): Promise < any >
{
if(this.data) // should keep service from doing extra http for the same request
{
return Promise.resolve(this.data);
}
else
{
return this.http.post(this.createURL('getData',{}),JSON.stringify({}), this.createGetOptions()).pipe(
timeout(environment.timeout),
share(),
map((response: Response) => {
return response;
})).toPromise();
}
}
还要确保按如下方式导入共享:
import {share} from 'rxjs/operators';
推荐阅读
- python - 无法从 anaconda 中找到 python 模块,使用 pip 安装的模块
- angular - 角度叠加定位 - 它是如何工作的?
- oracle - 计算表中学生状态的触发器
- swagger - 如何为每个 HTTP 状态代码提供单独的示例?
- android - 出现此消息崩溃:java.lang.ClassCastException: com.google.firebase.Timestamp 无法转换为 java.util.Date
- java - 如何通过 2 个列表并进行检查
- react-native - React-Native-Gesture-Handler 在 Android 上执行代码期间失败
- r - 基于循环计算行
- python-3.x - 使用python合并excel表
- excel - 如何使用一个公式(Excel VBA)根据各种输入值计算各种结果