Мне трудно понять, как создать рекурсивный цикл для вызовов API с помощью Observables.
Сценарий: я вызываю внешний API, который возвращает что-то вроде этого:
{
data: {something, something, something},
next: "url for next set of data"
}
Мне нужно продолжать вызывать одну и ту же функцию, чтобы собрать все данные в один объект, пока ответ имеет значение в next
.
Мне удалось сделать это в другом проекте с Promises, где я отображаюданные возвращаются в один массив с помощью функции concat()
, но я почему-то не могу понять, как мне это сделать с Observables
.
Рабочий пример с использованием обещаний:
getData: function(url, params, headers){
return new Promise((resolve, reject) => {
axios.get(url, {
params: params,
headers: headers,
}).then((response) => {
let responseData = response.data.data[0];
if (response.data.next) {
this.getData(response.data.next, {}).then((resp) => {
for (let dataSet of responseData.dataSets) {
let row = resp.dataSets.find(i => i.variable === dataSet.variable)
if (row) {
dataSet.data = dataSet.data.concat(row.data)
}
}
resolve(responseData);
}).catch((error) => {
reject(error)
})
} else {
resolve(responseData);
}
}).catch(error => {
reject(error)
})
})
}