angular - 使用 forkJoin Angular 5 的 MergeMap 问题
问题描述
我正在尝试使用 mergeMap 和 forkJoin 有条件地执行 5 个并行 http 请求。对我来说,只有第一个 api 被执行,其余的 api 没有触发。
我的函数将执行第一个 api,如果它返回状态为“NOT_FOUND”,那么我需要再执行 5 个 api 并需要返回最终结果。如果我得到的状态与“NOT_FOUND”不同,只需从第一个 http 请求返回 observable。我尝试了不同的选项,但似乎没有任何效果。在共享代码下方,我收到“错误类型错误:无法获取未定义或空引用的属性‘映射’”
public myPostWrapper( url, body, flag): Observable<any> {
return this.http.post( url, body, { headers: this.headers } )
.map(( out: any ) => {
console.log( 'out', JSON.stringify( out ) );
this.result = out;
} )
.mergeMap(( response: any ) => {
console.log( 'response-inside', JSON.stringify( response ) );
if ( this.result.status === 'NOT_FOUND' ) {
return Observable.forkJoin(
response.map(( resp: any ) => {
return this.http.post(url, body, { headers: this.headers })
.map(( res: any ) => {
const section: any = res;
return section;
} );
} ),
response.map(( resp: any ) => {
return this.http.post(url, body, { headers: this.headers })
.map(( res: any ) => {
const section: any = res;
return section;
} );
} )
);
} else {
return Observable.of( this.result );
}
} )
.catch(( error: any ) => Observable.throw( error || 'Server error' )
);
}
任何帮助/方向将不胜感激。注意我使用 Rxjs 5.52 和 Angular 5
解决方案
在第一个map
,你设置的地方this.result
,你不返回任何东西。这意味着,链的以下部分将在undefined
. 添加return out;
到第一个map
操作,这应该可以解决您的问题。
...
return this.http.post( url, body, { headers: this.headers } )
.map(( out: any ) => {
console.log( 'out', JSON.stringify( out ) );
this.result = out;
return out; // <--- This return here
} )
...
或者,您应该将所有出现的response
替换mergeMap
为this.result
。
推荐阅读
- python-3.x - 为什么protobuf在python中等于0时会错过一些参数?
- reactjs - 对 React-Data-Grid 中的某些列进行验证
- swift - 在 Swift 中获取子字符串到索引
- sql - 将 varchar 值转换为数据类型位时转换失败。联合所有
- java - 你喜欢重复代码而不是实用程序类吗?
- actions-on-google - 找不到令牌网址
- c# - 在目录和子目录中搜索快速 xml 文件以获取 c# 中的数百万数据
- ruby-on-rails - RBenv - 创建一个 gemset
- asp.net-core - ConfigureKestrel() 与 appsettings 冲突
- sql-server - 创建的日期维度无法切片多维数据集