GMail API 分页使用 nextPageToken

Rus*_*ott 5 jquery gmail pagination google-api gmail-api

花了几个小时搜索谷歌等。阿尔。对于答案,确定这很简单,但是如何使用 nextPageToken 通过 GMail api 创建分页?我所做的一切都无法使分页工作(来回)。

假设“授权用户”并使用我调用的正确范围进行访问

 gapi.client.load('gmail','v1',displayInbox);
Run Code Online (Sandbox Code Playgroud)

然后

function displayInbox(){
    var request = gapi.client.gmail.users.messages.list({
    'userId':'me',
    'maxResults':10,
    });

  request.execute(function(response){
    $.each(response.messages,function(){
      var messageRequest = gapi.client.gmail.users.messages.get({
        'userId':'me',
        'id':this.id
      });
      messageRequest.execute(appendMessageRow);
    });
  });
}
Run Code Online (Sandbox Code Playgroud)

appendMessageRow 只是在表格中列出列表,例如

function appendMessageRow(message){
   var txt = '<tr>';
   txt +='<td>'+getHeader(message.payload.headers, 'From')+'</td>';
   txt +='<td>';
   txt +='<a href="#message-modal-'+ message.id +'" data-toggle="modal" id="message-link-' + message.id+'">' +getHeader(message.payload.headers, 'Subject') +'</a>';
   txt +='</td>';
   txt +='<td class="text-xs-right">'+moment(parseInt(message.internalDate)).format('HH:mm')+'</td>';
   txt +='</tr>';
   $('table tbody').append(txt);
}
Run Code Online (Sandbox Code Playgroud)

当我 console.log request.execute 我看到 nextPageToken 作为对象键我不能做和需要做的是添加分页按钮 - messageRequest.execute 不通过 nextPageToken 并且似乎没有办法创建/获取'previousPageToken'。

对不起,如果简单但它是我还是比它更重要?GMail API 文档在这个主题上看起来很差(对我来说),我还没有找到有帮助的 stackoverflow 答案。

回顾一下 - 如何添加分页按钮并将适当的变量传递给调用/调用 displayInbox()。

提前致谢

Tho*_*lle 5

您可以在每个请求中保存下一页令牌并在下一个请求中使用它。如果响应中没有下一页令牌,则您知道您已收到所有消息:

function listMessages(pageToken) {
  return new Promise(function(resolve) {
    var options = {
      userId: 'me',
      maxResults: 10
    };
    if (pageToken) {
      options.pageToken = pageToken;
    }
    var request = gapi.client.gmail.users.messages.list(options);
    request.execute(resolve);
  });
}

function getMessage(message) {
  return new Promise(function(resolve) {
    var messageRequest = gapi.client.gmail.users.messages.get({
      userId: 'me',
      id: message.id
    });
    messageRequest.execute(resolve);
  });
}

var pageToken;
function displayInbox(){
  listMessages(pageToken).then(function (response) {
    if (response.nextPageToken) {
      pageToken = response.nextPageToken; // Get the next page next time
    } else {
      console.log('No more pages left!');
    }
    if (response.messages) {
      Promise.all(response.messages.map(getMessage)).then(function (messages) {
        messages.forEach(appendMessageRow);
      });
    }
  })
}
Run Code Online (Sandbox Code Playgroud)