【发布时间】:2020-03-24 08:17:41
【问题描述】:
我有两个服务器调用需要等待。但是,用户可以决定是否进行第二次服务器调用。所有这些都发生在 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,但这些问题是我无法在出现错误的情况下永远完成 Promise,因此导航永远不会发生。
【问题讨论】:
标签: javascript angular typescript promise rxjs