Зависимые от углов $ http запросы - PullRequest
0 голосов
/ 14 декабря 2018

Я пытаюсь получить данные с помощью пост-запроса, и API, к которому я обращаюсь, возвращает максимум 50 элементов.До сих пор это прекрасно работало, но теперь у нас есть несколько случаев, когда необходимо получить большее количество неопределенных элементов.$http -метод возвращает обещание, но я должен полагаться на эти данные, чтобы сделать еще один запрос.Мой упрощенный код:

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 голосов
/ 14 декабря 2018

Почему бы не сделать что-то вроде этого:

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 еще раз, но обновите ваши данные.

0 голосов
/ 14 декабря 2018

Я бы обернул этот запрос в функцию, которая также может вызываться рекурсивно внутри then(), чтобы вернуть другое обещание запроса

Что-то вроде:

function getData(term, time, res = []) {

  var data = "q=" + term + "&timestamp=" + time
  // return the $http promise
  return $http({
    method: 'POST',
    url: url,
    data: data
  }).then(function(response) {
    let dataList = response.data.list;
    // merge new data into final results array
    res = res.concat(dataList);

    if (dataList.length > 50) {
       const timeStampFromResponse = //????
      // return new request promise
      return getData(term, timeStampFromResponse, res)
    }
    // return final array
    return res;

  })
}

getData(term, latest).then(function(results) {
  // all results available here
}).catch(function(response) {
  if (shouldLog) {
    console.log("[DebuggingService] " + response);
  }
})
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...