gpt4 book ai didi

rxjs - 创建递归 Observable 循环?

转载 作者:行者123 更新时间:2023-12-04 01:55:53 25 4
gpt4 key购买 nike

我很难弄清楚如何使用 Observables 为 api 调用创建递归循环。

设想:
我调用外部 API,它返回如下内容:

{
data: {something, something, something},
next: "url for next set of data"
}

只要响应在 next 中有值,我就需要继续调用相同的函数来将所有数据收集到一个对象中。 .

我设法在另一个带有 Promises 的项目中做到了这一点,我使用 concat() 将返回的数据映射到单个数组中。函数,但不知何故我无法理解我应该如何使用 Observables .

使用 promise 的工作示例:
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)
})
})
}

最佳答案

您可以使用 .expand()运算符(operator)。此递归的终止条件是 next属性是 falsy .使用三元运算符,代码只是一行代码:

expand(({data, next}) => next ? getData(next): Observable.empty() )
.subscribe(result => console.log(result));

这是工作 JSBin .我 mock 了很多东西,但这应该是微不足道的。

关于rxjs - 创建递归 Observable 循环?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50714056/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com