LINUX.ORG.RU

Restful API - получить только n - первых записей

 , ,


1

2

Всем привет!

Есть Restful API, в котором предусмотрена выдача как всех записей, так и только определенной записи:

/service/api/v1/entries/ - все записи
/service/api/v1/entries/n - n-я запись

Нужно получить первые десять записей.

Можно конечно получить сразу все записи и сделать сплайс только десяти первых. Но вдруг всех записей, например, миллиард? Зачем нам тянуть лишние?

Подумал я так и решил в цикле от 1 до 10 получать по одной записи:

var i = 1;

for (i; i < 11; i++) {
    $.ajax({
        method: "GET",
        url: "/service/api/v1/entries/" + i + "/",
        dataType: "json",
        success: function(response) {
            ...
            console.log(response);
        }
        ...
    });
}

Но в таком случе данные прихоядт непоследовательно (друг за другом), а в разнобой, например, сначала приходит запись с id=1, потом с id=7, потом с id=3 и т.п.

Посему вопроc: как используя асинхронныю функцию ajax() получать даные четко последовательно, одно за другим? Есть какие-нибудь best practices?


Это пример с async:

var idArr = [];
for (var i = 1; i < 11; i++)
  idArr.push(i);

async.map(idArr, function(id, callback) {
  $.ajax({
    method: "GET",
    url: "/service/api/v1/entries/" + id + "/",
    dataType: "json",
    success: function(response) {
      callback(null, response);
    }
  });
}, function(err, results) {
  if (err) return console.error(err);
  console.log(results);
});
Black_Roland ★★★★
()
Последнее исправление: Black_Roland (всего исправлений: 3)
Ответ на: комментарий от Black_Roland

Это пример на jQuery:

var promises = [];
for (var i = 1; i < 11; i++) {
  var xhr = $.ajax({
    method: "GET",
    url: "/service/api/v1/entries/" + i + "/",
    dataType: "json",
  });
  promises.push(xhr);
}

$.when.apply($, promises).done(function() {
  console.log(arguments); // массив записей
});

Но этот пример надо потестить.

Black_Roland ★★★★
()
Ответ на: комментарий от Black_Roland

Пример с promises и jquery - то что нужно, спасибо.

djnoob
() автор топика
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.