[英]RxJS zip and pipe in combination not working
我有两个需要等待的服务器调用。 但是,用户可以决定是否进行第二次服务器调用。 所有这些都发生在 Angular Resolver 中,因为下一页需要数据。
问题是,从我的 zip 函数中,代码永远不会到达管道,让我卡在解析器中。 这是程序:
压缩我的请求
管他们
并返回一个 observable 到我的解析函数
这是我的代码:
public resolve(route: ActivatedRouteSnapshot, state: RouterStateSnapshot):
Observable<any> | Promise<any> { //
const id = +route.paramMap.get('id');
const wantsSecondRequest = +route.paramMap.get('wantsSecondRequest');
const requests: Array<Observable<any>> = new Array();
requests.push(firstServerCallHappensHere());
if (wantsSecondRequest === 1) {
requests.push(secondServerCallHappensHere());
}
return zip(requests).pipe(take(1), mergeMap(([a, b]) => {
// DO STUFF WITH MY REQUESTS
return of(a);
}));
}
我尝试使用 Promise.all 并使用 Promises 而不是 Observables,但问题是我无法在出现错误的情况下永远完成 Promises,因此导航永远不会发生。
根据文档http://reactivex.io/documentation/operators/zip.html zip()
接受许多可观察的参数,但您提供一个数组。 它可能有帮助:
public resolve(route: ActivatedRouteSnapshot, state: RouterStateSnapshot):
Observable<any> | Promise<any> { //
const id = +route.paramMap.get('id');
const wantsSecondRequest = +route.paramMap.get('wantsSecondRequest');
return zip(
firstServerCallHappensHere(),
wantsSecondRequest === 1 ? secondServerCallHappensHere() : undefined,
).pipe(take(1), mergeMap(([a, b]) => {
// DO STUFF WITH MY REQUESTS
return of(a);
}));
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.