Javascript 通过CRUDAPI分页

Javascript 通过CRUDAPI分页,javascript,pagination,socket.io,sails.js,Javascript,Pagination,Socket.io,Sails.js,我正在编写一个客户端,它将查询CRUDWebAPI。我将使用socket.io.get('/api')。问题是:我想对结果进行分页,这样我就可以在客户机仍在接收数据时开始显示内容 API的结果以JSON的形式出现,如 [ { "id": "216754", "date": "2015-07-30T02:00:00.000Z" }, { "id": "216755", "date": "2015-08-30T02:00:00.000Z" } ] a

我正在编写一个客户端,它将查询CRUDWebAPI。我将使用
socket.io.get('/api')
。问题是:我想对结果进行分页,这样我就可以在客户机仍在接收数据时开始显示内容

API的结果以JSON的形式出现,如

[
  {
    "id": "216754",
    "date": "2015-07-30T02:00:00.000Z"
  },
  {
    "id": "216755",
    "date": "2015-08-30T02:00:00.000Z"
  }
]

api允许我构造一个URL查询,在这里我可以限制每个结果数组的大小。因此,我可以进行类似于
/api&skip=10&limit=10
的查询,它将得到从第10项到第19项的结果。我希望能够做的是保持循环并接收结果,直到结果数组小于length=10(这意味着我们到达了数据集的末尾)。我需要它是异步的,这样我就可以从一开始就开始处理数据,并在每次收到新页面时更新我所做的任何工作。

你想做的是无限滚动吗?还是希望异步调用所有页面,并能够在第2页之前接收第3页?读了这个问题,我明白这是第二个问题

您不能依赖“直到结果数组小于长度=10”,因为您希望同时启动所有调用。

您应该执行第一次查询以检索记录数。然后,您将能够知道有多少页,您可以生成所需的所有URL并异步调用它们

它可能看起来像这样(代码未测试):

var nbItemsPerPage=10;
socket.io.get(

“/api/count”,//但是,您的代码中没有承诺,也不清楚您试图用承诺做什么。另外,您无论如何也不能在异步操作上使用
while
语句循环。您能否回到最开始,描述您试图解决的问题,因为当前方法中的代码没有帮助ing理解您想要实现的目标。请为您想要实现的目标编写一个迷你规范,独立于您目前编写的任何代码或您在该代码中遇到的任何问题。我们需要对您试图解决的所需接口或问题进行清晰的描述。@jfriend00,是否更清晰?:)
直到结果数组小于length=20(这意味着我们到达了数据集的末尾)
-如果您;根据
/api&skip=10&limit=10
的规定,您一次只能获取10个数据块,然后在第一个数据块之后停止anyway@JaromandaX,谢谢您的更正。:)我没有想过要同时启动所有电话,但我喜欢!你能展示一些实现这一点的伪代码吗?我刚刚开始理解异步编程。因为调用是异步的,如果不使用回调或类似
async
的库,它们将在同一时间追加。我添加了一个代码示例。
var nbItemsPerPage = 10;

socket.io.get(
  '/api/count',  // <= You have to code the controller that returns the count
  function(resCount) {
    nbPages = resCount / nbItemsPerPage;
    for (var i=0; i<nbPages; i++) {
      // Javascript will loop without waiting for the responses
      (function (pageNum) {
        socket.io.get(
          '/api',
          {skip:nbItemsPerPage*pageNum, limit=nbItemsPerPage},
          function (resGet) {
            console.log('Result of page ' + pageNum + ' received');
            console.log(resGet);
          }
      )(i);  // <= immediate function, passing "i" as an argument
             // Indeed, when the callback function will be executed, the value of "i" will have changed
             // Using an immediate function, we create a new scope to store pageNum for every loop
    }
  }
)