Czekanie na forkJoina

0

Cześć, mam w angularze następującą funkcję:

refresh(){

    var tab1 = [];
    var tab2 = [];
    var tab3 = [];

    this.multiselectedMeters.forEach(item =>
    {     
      forkJoin
        (
          this.influxService.getManagerSummary(item.id),
          this.influxService.getRaw('cost', item.systemName, from, to),
          this.influxService.getRaw('ea_diff', item.systemName, from, to)
        )
        .subscribe(([managerSummary, graph, graphCost]) => {
          tab1.push(managerSummary);
          tab2.push(graph);
          tab3.push(graphCost);         
        })   
    });

    console.log(tab2.length)
}

Mój problem polega na tym, że w linijce "console.log(tab2.length)" otrzymuję wartość 0. Najprawdopodobniej spowodowane jest to tym, że linijka ta wykonuje się szybciej niż forkJoin otrzyma wyniki. Co musiałbym zmienić, żeby funkcja działała jak należy?

0

Możesz sobie wybrać jednaz pasujących odpowiedzi:
a) nie da się,
b) przenieść console.log(tab2.length) do wnętrza subscribe( ...),
c) zrobić tab2 jako Observable lub Promise

* Są jeszcze inne możliwości, ale to chyba najprostsze odpowiedzi.

0
jarekr000000 napisał(a):

Możesz sobie wybrać jednaz pasujących odpowiedzi:
a) nie da się,
b) przenieść console.log(tab2.length) do wnętrza subscribe( ...),
c) zrobić tab2 jako Observable lub Promise

* Są jeszcze inne możliwości, ale to chyba najprostsze odpowiedzi.

Wybierając odpowiedź b będę miał nową wiadomość po każdym spushowaniu jeśli się nie mylę. Chciałbym mieć jedną końcową zwrotkę, po wykonaniu wszystkich forEachów.

1

To inaczej powinieneś zacząc- od forkJoin i przekazać tablice stworzoną od this.multiselectedMeters jako parametr.
Idea kodu, (nie mam czasu spprawdzać dokładnie):

forkJoin ( 
   this.multiselectedMeters.map ( item =>      
      forkJoin
        (
          this.influxService.getManagerSummary(item.id),
          this.influxService.getRaw('cost', item.systemName, from, to),
          this.influxService.getRaw('ea_diff', item.systemName, from, to)
        )
    )
).subscribe( tablyca => .... tu masz wsio posklejane ) 

uwaga: w sumie to nie mam pojęcia czy nic się nie będzie działo jak są zagnieżdżone forkJoiny - niby nie ma powodu... ale dobrze by to sprawdzić i doczytać w dokumentacji.

1 użytkowników online, w tym zalogowanych: 0, gości: 1