Вызов функции после выполнения нескольких функций в angular 8 - PullRequest
0 голосов
/ 03 мая 2020

Я новичок в angular и не знаю, как вызывать функцию после завершения нескольких функций. Мне не нужно, чтобы другие функции были точно по порядку, но мне нужно вызывать другую функцию после того, как весь набор этих функций завершен.

Это мой код:

  global() {
    this.productsService.getProducts().subscribe(res => {
      this.products = res;

      this.products.forEach( (product, index) => {
        this.fullProductDetails[index] = new FullProduct();
        this.fullProductDetails[index].product = product;

        this.f1(product['a'], index);
        this.f2(product['b'], index);
        this.f3(product['c'], index);
      });

      this.initProductsChart();
    });
  }

  f1(a: any, index: number) {
    this.productsService.getSomethingByA(a).subscribe(res => {
      this.fullProductDetails[index].somethingA = res;
    });
  }

  f2(b: any, index: number) {
    this.productsService.getSomethingByB(b).subscribe(res => {
      this.fullProductDetails[index].somethingB = res;
    });
  }

  f3(c: any, index: number) {
    this.productsService.getSomethingByC(c).subscribe(res => {
      this.fullProductDetails[index].somethingC = res;
    });
  }

  initProductsChart() {
    ...
  }

Я хочу, чтобы функция initProductsChart() запускалась после того, как f1(), f2() и f3() завершены для всех продуктов.

Есть ли способ сделать это, или мне нужно дождитесь, пока все функции сами доберутся до sh?

1 Ответ

0 голосов
/ 03 мая 2020

Вы можете использовать forkJoin из rx js.

    subscriptions = [];
    global() {
    this.productsService.getProducts().subscribe(res => {
    this.products = res;

    this.products.forEach( (product, index) => {
        this.fullProductDetails[index] = new FullProduct();
        this.fullProductDetails[index].product = product;

        this.subscriptions.push(this.f1(product['a'], index));
        this.subscriptions.push(this.f2(product['b'], index));
        this.subscriptions.push(this.f3(product['c'], index));
    });
    forkJoin(this.subscriptions).subscribe(() => {
        this.initProductsChart();
    });

    });
}

f1(a: any, index: number) {
    this.productsService.getSomethingByA(a).subscribe(res => {
    this.fullProductDetails[index].somethingA = res;
    });
}

f2(b: any, index: number) {
    this.productsService.getSomethingByB(b).subscribe(res => {
    this.fullProductDetails[index].somethingB = res;
    });
}

f3(c: any, index: number) {
    this.productsService.getSomethingByC(c).subscribe(res => {
    this.fullProductDetails[index].somethingC = res;
    });
}

initProductsChart() {
    ...
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...