繁体   English   中英

RxJS zip 和管道组合不起作用

[英]RxJS zip and pipe in combination not working

我有两个需要等待的服务器调用。 但是,用户可以决定是否进行第二次服务器调用。 所有这些都发生在 Angular Resolver 中,因为下一页需要数据。

问题是,从我的 zip 函数中,代码永远不会到达管道,让我卡在解析器中。 这是程序:

  1. 压缩我的请求

  2. 管他们

  3. 并返回一个 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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM