我正在尝试通过发布请求获取数据,而我正在查询的API最多返回50个元素。到目前为止,这很好用,但是现在我们有一些用例,必须接收更多不确定的元素。
$http
方法返回一个Promise,但是我必须依靠此数据来发出另一个请求。
我的简化代码:
var data =
"q=" + term
"×tamp=" + latest
$http({
method: 'POST',
url: url,
data: data
}).then(
function(response) {
let dataList = response.data.list;
if(dataList.length > 50)
/*TODO: new query with other timestamp-value*/
return dataList ;
},
function(response) {
if(shouldLog){
console.log("[DebuggingService] " + response);
}
}
);
是否有一种方法可以根据之前的请求组合多个http请求?
编辑
没有分页。因此,必须更改时间戳记值。 (以响应的最新时间戳记)
答案 0 :(得分:1)
我会将请求包装在一个函数中,该函数也可以在*errorFeedback
中递归调用以返回另一个请求promise
类似的东西:
then()
答案 1 :(得分:1)
为什么不做这样的事情:
var data =
"q=" + term + "×tamp=" + latest;
var amounts = 2;
url = 'https://api.github.com/search/repositories?q=topic:ruby+topic:rails';
call(url, data, checkForMore);
function call(url, data, callback) {
$http({
method: 'POST',
url: url,
data: data
}).then(function(data){
console.log(data);
console.log('------------');
callback(data);
});
}
function checkForMore(data){
if (amounts > 0){
amounts -= 1;
var newData = "q=" + term +
"×tamp=" + data.SomehowGetLastestTimestamp;
call(url, newData, checkForMore);
} else {
// Save it maybe?
}
}
这是一个非常粗糙的示例,可能无法正常工作,但您可以很好地了解该怎么做。
基本上,有一个在.then
匿名函数上调用的回调方法。然后,您可以传入数据并检查是否需要更多调用。 (根据您的情况)。如果您这样做,则只需再次调用call
函数,即可更新数据。