Angular rxjs请求并行和顺序

时间:2018-02-28 01:05:12

标签: rxjs angular5

我需要执行并行请求,在完成所有这些请求之后,我需要再执行一次调用。

public loadAppData() {
  // get current Data
  let currentData: any = this.sourceAppData.getValue();

  // load userInfo
  return this.storage.get('userInfo').then((userInfo) => {
    this.userInfo = userInfo;

    // call endpoints
    let products = this.loadProducts();
    let customers = this.loadCustomers();
    let priceRules = this.loadPriceRules();
    let shop = this.loadShop();

    // load in parallel
    return forkJoin([products, customers, priceRules, shop]).subscribe(results => {
      let currentData: any = this.sourceAppData.getValue();
      currentData.products = results[0];
      currentData.customers = results[1];
      currentData.priceRules = results[2];
      currentData.shop = results[3][0];
      this.updateAppData(currentData);
    });
    // I need one more request here
  });
}

在ForkJoin之后我需要再打一次电话,因为我在其中一个呼叫中有一个信息,我依赖它。问题是我已经订阅了这个电话。

如何执行forkJoin,获取fork join的结果,再做一次请求,而不是应该执行常规流程(比如订阅它)。

1 个答案:

答案 0 :(得分:0)

您可以在forkJoin电话后使用mergeMap。并且可以使用return forkJoin([products, customers, priceRules, shop]).pipe( mergeMap( results => oneMoreOperation(results), (results, oneMoreResult) => [...results, oneMoreResult] ) ).subscribe(resultsWithOneMoreResult => { ... }); 的结果选择器将另外一个结果添加到结果数组中:

oneMoreOperation

TableStyle()是一个返回ObservbleInput的函数。