gpt4 book ai didi

javascript - 我可以从链式 AJAX 调用生成一系列 Rx Observables 吗?

转载 作者:行者123 更新时间:2023-12-03 07:27:12 26 4
gpt4 key购买 nike

技术背景

我在 Web 浏览器中使用 jQuery 来调用从日志中返回一组条目的 API。

API 请求采用两个参数:

  • offset_timestamp :一个整数,指定我想要的最早可能的条目
  • limit :一个整数,指定要返回的记录数

请求和响应示例

Request with parameters:

- offset_timestamp = 100
- limit = 50


curl "https://example.com/log?offset_timestamp=100&limit=5"


Resulting JSON Response:

{
next_timestamp: 222,
end_of_log: false,
entries: [
{
timestamp: 111,
data: { ... }
},
{
timestamp: 112,
data: { ... }
},

...

{
timestamp: 160,
data: { ... }
}
]
}

如果我使用普通的 jQuery + 回调,我想我必须递归地链接 AJAX 调用。大致如下:

// NOTE: I have NOT tested this code.
// I just wrote it for illustration purposes

function getBatch(offset, limit, callback) {
var url = "https://example.com/logs?offset_timestamp=" + offset + "&limit=" + limit;
var ajaxParams = {
method: "GET",
url: url
};

jQuery.ajax(ajaxParams))
.done(function(data) {
if (data.end_of_log) {
return callback(data.entries);
}
return getBatch(data.next_timestamp, limit, function(entries) {
return callback(entries.concat(data.entires));
});
});
}

function processEntries(entries) {
for (var i = 0; i < entries.length; i++) {
console.log(i.data);
}
}

getBatch(0, 50, processEntries);

当然,我宁愿拥有一系列 Observables(每个 Observables 包含一批条目),这样我就可以使用 flatMap()获取所有条目的序列。

问题

如果通过 jQuery 调用创建一个 Observable,例如Rx.Observable.fromPromise(jQuery.ajax({...})) ,是否可以使用 RxJS 将任意数量的这些 Observables 链接在一起,使用 response.next_timestamp 的值来自先前调用的后续调用的参数?

最佳答案

我会尝试使用 expand运算符(operator)。您还可以在此处查看使用示例:RxJs: How to loop based on state of the observable? ,这里:RxJS, how to poll an API to continuously check for updated records using a dynamic timestamp

简而言之,它允许您对可观察量进行递归,通过返回 Rx.Observable.empty() 来表示递归结束。

关于javascript - 我可以从链式 AJAX 调用生成一系列 Rx Observables 吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35953617/

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