Как объединить с Observable внутри l oop в javascript? - PullRequest
0 голосов
/ 30 марта 2020

В angular проекте у меня есть список процессов, мне нужно получить связанные процессы каждого процесса и объединить их в один массив. Единственный способ получить список связанных процессов - использовать наблюдаемый метод. Какие методы rx js я должен использовать и как получить этот связанный список процессов? я новичок в rx js.

Я пытался просто положить sh каждый результат в окончательный массив, но получаю ошибку типа cannot read property 'push' of undefined

let processToProcessLinkList = [];
listOfProcesses.forEach(process => {
    // populate link list
    this.processEndpoint.processLinkedProcessList(process.id, new DataSourceRequest()).subscribe(result => {
        if(result.success) {
            result.data.forEach(element => {
                this.processToProcessLinkList.push(element);    
            }); 
        // this.processToProcessLinkList.push(...result.data);                      
    } 
}
    ```

1 Ответ

0 голосов
/ 30 марта 2020

Если я правильно понял, вы начинаете с массива listOfProcesses. Для каждого элемента в массиве вы должны сделать вызов конечной точке через this.processEndpoint.processLinkedProcessList. В конце концов вы должны собрать все ответы в массив processToProcessLinkList.

Если это так, вы можете попробовать что-то вроде этого

// create an array of Observables representing the requests to the end point, one per element in the array listOfProcesses
const requests = listOfProcesses.map(p => this.processEndpoint.processLinkedProcessList(p.id, new DataSourceRequest()));

// execute all requests in parallel to get an array of responses
forkJoin(requests)
.subscribe(responses => processToProcessLinkList = responses)

Примечание 1: ошибка cannot read property 'push' of undefined кажется, связано с тем фактом, что processToProcessLinkList определяется как локальная переменная, а не как свойство класса.

Примечание 2: Я предлагаю прочитать кое-что о Observables и http-запросах, таких как эта статья

...