RxJs запросы в цикле
У меня есть список параметров и для каждого параметра отправляется запрос на сервер. Количество параметров может быть разным, поэтому запросы отправляются в цикле. Вопрос, как мне отправить запросы по всем параметрам, дождаться ответа от всех запросов и продолжить выполнение программы. Для этого нужно использовать Rx Js.
parameter.dependParams.forEach(function (element) {
let par = pars.find(p => locator(p, element));
if (par) {
par.loading = true;
service.getValues(element, pars, action.action, action.actionScheme).subscribe(
data => {
par.values = data;
par.loading = false;
console.log("Значения получены");
},
error => {
this.error = error.error.message || error.statusText;
par.loading = false;
this.showError();
}
);}}
Ответы (1 шт):
Так как запросы разные, то можно получить список методов, которые возвращают Observable, то есть в вашем примере service.getValues(element, pars, action.action, action.actionScheme).
Ну а дальше, получается нужно их все вызвать через forkJoin, как предложили в комментариях.
В коде будет выглядеть как-то так:
const observables = parameter.dependParams.map(element => {
// ошибку можно обработать здесь в pipe, если надо обработать по каждому
service.getValues(element, pars, action.action, action.actionScheme);
});
// В subscribe будет массив ответов ваших запросов, нужно будет только обработать результат и ошибки
forkJoin(observables).subscribe(...)
P.S. Логику с if (par) можно решить через filter перед map.