我想进行递归HTTP调用。我了解我可以进行初始调用,然后使用pipe
和expand
重复HTTP调用。
但是,如下面的伪代码所示,回调函数返回已解析的响应,因此流程是异步的。在这种情况下,如何pipe
解析的响应?
const fetchPage = (request) => {
return ajax(request).pipe(map(response => {
if (response.status == 200) {
// The callback returns the parsed response, how can/should I wait for the callback to return?
parser.parse(response.responseText, callback);
} else {
return EMPTY;
}
}));
}
fetchPage(request).pipe(
expand(parsedResponse => {
if (checkLast(parsedResponse)) {
return EMPTY;
} else {
return fetchPage(parsedResponse.next);
};
}),
concatMap(parsedResponse => parsedResponse));
答案 0 :(得分:0)
expand
之前,您应该先进行解析。
例如
const fetchPageParsed = () => {
return fetchPage().pipe(
map(response => parse(response))
);
};
fetchPageParsed().pipe(
expand(parsed => {
if (parsed.last) {
return EMPTY;
}
return fetchPageParsed(parsed.nextPage);
})
)