角度相关的$ http请求

时间:2018-12-14 15:50:29

标签: javascript angularjs promise

我正在尝试通过发布请求获取数据,而我正在查询的API最多返回50个元素。到目前为止,这很好用,但是现在我们有一些用例,必须接收更多不确定的元素。 $http方法返回一个Promise,但是我必须依靠此数据来发出另一个请求。 我的简化代码:

var data =
    "q=" + term
    "&timestamp=" + 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请求?

编辑

没有分页。因此,必须更改时间戳记值。 (以响应的最新时间戳记)

2 个答案:

答案 0 :(得分:1)

我会将请求包装在一个函数中,该函数也可以在*errorFeedback中递归调用以返回另一个请求promise

类似的东西:

then()

答案 1 :(得分:1)

为什么不做这样的事情:

var data =
  "q=" + term + "&timestamp=" + 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 +
                                    "&timestamp=" + data.SomehowGetLastestTimestamp;
      call(url, newData, checkForMore);
    } else {
        // Save it maybe?
    }
}

这是一个非常粗糙的示例,可能无法正常工作,但您可以很好地了解该怎么做。

基本上,有一个在.then匿名函数上调用的回调方法。然后,您可以传入数据并检查是否需要更多调用。 (根据您的情况)。如果您这样做,则只需再次调用call函数,即可更新数据。