技术背景
我在 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(每个都持有一批条目),这样我就可以flatMap()
用来获取所有条目的序列。
问题
如果从 jQuery 调用创建一个 Observable,例如Rx.Observable.fromPromise(jQuery.ajax({...}))
,是否可以使用 RxJS 将任意数量的这些 Observable 链接在一起,使用response.next_timestamp
来自先前调用的值在后续调用的参数中?